{$CLEO}

{
GTA SA Scale: 648.0 x 448.0
}

{
Reserved variables:
0@ - GTA SA version
1@ - Pool addresses
2@ - Additional variables
3@ - X mouse position
4@ - Y mouse position
5@ +.. temporary variables
29@ - GXTcomuniqueKey 
31@ - script content address
}

const
TEXTURE_CURSOR = 1
TEXTURE_SPINNER = 2   
TEXTURE_HSV_PALLETE = 3
TEXTURE_NEEDLE = 4
TEXTURE_SAVE = 5
TEXTURE_RELOAD = 6
TEXTURE_TIME_DISABLED = 7
TEXTURE_TIME_ENABLED = 8
END

const
SIZEOF_BYTE = 1
SIZEOF_CHAR = 1
SIZEOF_SHORT_INT = 2      
SIZEOF_WORD = 2     
SIZEOF_FLOAT = 4
SIZEOF_LONG_INT = 4 
SIZEOF_INT = 4
SIZEOF_DWORD = 4
SIZEOF_QWORD = 8
SIZEOF_SHORT_STRING = 8
SIZEOF_LONG_STRING = 16
end

const
IniFile = "CLEO\TimecycEditor.ini"

SpinnerValueSizeX = 12.666 
SpinnerValueSizeY = 15.333
PanelXSizeValue = 220.0

HSV_ColorboxBorderValueSizeX = 25.0
HSV_ColorboxBorderValueSizeY = 25.0

RegulationTextDistanceRelativeToPalleteValueX = 10.0
DistanceTextUnderTextValueY = 5.0

RegulationFieldDistanceRelativeToTextValueX = 60.0
ByteRegulationFieldValueSizeX = 35.0
FloatRegulationFieldValueSizeX = 40.0

TimecycFloatAsByteUpperLimit = 12.7
TimecycFloatAsByteLowerLimit = -12.9
GXTcomuniqueKey = 29@s

RegulatorWaitTime = 40

FieldColorRed = 240
FieldColorGreen = 240
FieldColorBlue = 240

AdditionalVars = 2@
CTimecyc = 1@

CursorPosX = 3@
CursorPosY = 4@

GAME_VERSION = 0@
SCRIPT_POINTER = 31@

PanelHandle = 0@(AdditionalVars,1i)
PanelPage = 1@(AdditionalVars,1i)
Sprintf = 2@(AdditionalVars,1i)
WeatherAmountLimit = 3@(AdditionalVars,1i)
PanelSection = 4@(AdditionalVars,1i)
ComuniqueTextTimer = 5@(AdditionalVars,1i)

LockCursor = 6@(AdditionalVars,1i)
CWeather__LockedWeatherAddress = 7@(AdditionalVars,1i) 
CWeather__Upcoming_weatherAddress = 8@(AdditionalVars,1i) 
CWeather__CurrentWeatherAddress = 9@(AdditionalVars,1i) 

CursorSizeX = 10@(AdditionalVars,1i)
CursorSizeY = 11@(AdditionalVars,1i)

WeatherSpinnerPosX = 12@(AdditionalVars,1i)
WeatherSpinnerPosY = 13@(AdditionalVars,1i)

_mouseInvertXAddress = 14@(AdditionalVars,1i)
_mouseInvertYAddress = 15@(AdditionalVars,1i)

WeatherNameFieldPosX = 16@(AdditionalVars,1i)
WeatherNameFieldPosY = 17@(AdditionalVars,1i)
WeatherNameFieldSizeX = 18@(AdditionalVars,1i)
WeatherNameFieldSizeY = 19@(AdditionalVars,1i)

WeatherNameTextPosX = 20@(AdditionalVars,1i)
WeatherNameTextPosY = 21@(AdditionalVars,1i)

CycleSpinnerPosX = 22@(AdditionalVars,1i)
CycleSpinnerPosY = 23@(AdditionalVars,1i)

CycleNameFieldPosX = 26@(AdditionalVars,1i)
CycleNameFieldPosY = 27@(AdditionalVars,1i)
CycleNameFieldSizeX = 28@(AdditionalVars,1i)
CycleNameFieldSizeY = 29@(AdditionalVars,1i)

CycleNameTextPosX = 30@(AdditionalVars,1i)
CycleNameTextPosY = 31@(AdditionalVars,1i)

HSV_PalletePosX = 32@(AdditionalVars,1i)
HSV_PalletePosY = 33@(AdditionalVars,1i)
HSV_PalleteSizeX = 34@(AdditionalVars,1i)
HSV_PalleteSizeY = 35@(AdditionalVars,1i)

HSV_ColorBoxPosX = 36@(AdditionalVars,1i)
HSV_ColorBoxPosY = 37@(AdditionalVars,1i)
HSV_ColorBoxSizeX = 38@(AdditionalVars,1i)
HSV_ColorBoxSizeY = 39@(AdditionalVars,1i)

HSV_NeedleSizeX = 40@(AdditionalVars,1i)
HSV_NeedleSizeY = 41@(AdditionalVars,1i)

HSV_UnderBoxPosX = 42@(AdditionalVars,1i)
HSV_UnderBoxPosY = 43@(AdditionalVars,1i)
HSV_UnderBoxSizeX = 44@(AdditionalVars,1i)
HSV_UnderBoxSizeY = 45@(AdditionalVars,1i)

HSV_ColorBoxBorderSizeX = 46@(AdditionalVars,1i)
HSV_ColorBoxBorderSizeY = 47@(AdditionalVars,1i)

HSV_PalleteSelectedColorRed = 48@(AdditionalVars,1i)
HSV_PalleteSelectedColorGreen = 49@(AdditionalVars,1i)
HSV_PalleteSelectedColorBlue = 50@(AdditionalVars,1i)
HSV_PalleteSelectedColorAlpha = 51@(AdditionalVars,1i)

MainAlphaLevel = 52@(AdditionalVars,1i)

CurrentResolutionX = 53@(AdditionalVars,1i)
CurrentResolutionY = 54@(AdditionalVars,1i)

TemporaryVariable_1 = 55@(AdditionalVars,1i)
TemporaryVariable_2 = 56@(AdditionalVars,1i)
TemporaryVariable_3 = 57@(AdditionalVars,1i)
TemporaryVariable_4 = 58@(AdditionalVars,1i)
TemporaryVariable_5 = 59@(AdditionalVars,1i)
TemporaryVariable_6 = 60@(AdditionalVars,1i)

XSpinnerSizeX = 61@(AdditionalVars,1i)
XSpinnerSizeY = 62@(AdditionalVars,1i)

HSV_RGBTextX = 63@(AdditionalVars,1i)
HSV_RGBTextY = 64@(AdditionalVars,1i)
HSV_HSVTextX = 65@(AdditionalVars,1i)
HSV_HSVTextY = 66@(AdditionalVars,1i)

HSV_FieldSizeX = 67@(AdditionalVars,1i)
HSV_FieldSizeY = 68@(AdditionalVars,1i)

HSV_RedDescriptionPosX = 69@(AdditionalVars,1i)
HSV_RedDescriptionPosY = 70@(AdditionalVars,1i)
HSV_RedFieldPosX = 71@(AdditionalVars,1i)
HSV_RedFieldPosY = 72@(AdditionalVars,1i)
HSV_RedSpinnerPosX = 73@(AdditionalVars,1i) 
HSV_RedSpinnerPosY = 74@(AdditionalVars,1i) 

HSV_GreenDescriptionPosX = 75@(AdditionalVars,1i)
HSV_GreenDescriptionPosY = 76@(AdditionalVars,1i)
HSV_GreenFieldPosX = 77@(AdditionalVars,1i)
HSV_GreenFieldPosY = 78@(AdditionalVars,1i)
HSV_GreenSpinnerPosX = 79@(AdditionalVars,1i) 
HSV_GreenSpinnerPosY = 80@(AdditionalVars,1i) 

HSV_BlueDescriptionPosX = 81@(AdditionalVars,1i)
HSV_BlueDescriptionPosY = 82@(AdditionalVars,1i)
HSV_BlueFieldPosX = 83@(AdditionalVars,1i)
HSV_BlueFieldPosY = 84@(AdditionalVars,1i)
HSV_BlueSpinnerPosX = 85@(AdditionalVars,1i) 
HSV_BlueSpinnerPosY = 86@(AdditionalVars,1i) 

HSV_AlphaDescriptionPosX = 87@(AdditionalVars,1i)
HSV_AlphaDescriptionPosY = 88@(AdditionalVars,1i)
HSV_AlphaFieldPosX = 89@(AdditionalVars,1i)
HSV_AlphaFieldPosY = 90@(AdditionalVars,1i)
HSV_AlphaSpinnerPosX = 91@(AdditionalVars,1i) 
HSV_AlphaSpinnerPosY = 92@(AdditionalVars,1i)  

HSV_HueDescriptionPosX = 93@(AdditionalVars,1i)
HSV_HueDescriptionPosY = 94@(AdditionalVars,1i)
HSV_HueFieldPosX = 95@(AdditionalVars,1i)
HSV_HueFieldPosY = 96@(AdditionalVars,1i)
HSV_HueSpinnerPosX = 97@(AdditionalVars,1i) 
HSV_HueSpinnerPosY = 98@(AdditionalVars,1i) 

PalleteIsAlphaEnabled = 99@(AdditionalVars,1i)

HSV_PalleteAcceptanceRadiusX = 100@(AdditionalVars,1i)
HSV_PalleteAcceptanceRadiusY = 101@(AdditionalVars,1i)

HSV_SaturationDescriptionPosX = 102@(AdditionalVars,1i)
HSV_SaturationDescriptionPosY = 103@(AdditionalVars,1i)
HSV_SaturationFieldPosX = 104@(AdditionalVars,1i)
HSV_SaturationFieldPosY = 105@(AdditionalVars,1i)
HSV_SaturationSpinnerPosX = 106@(AdditionalVars,1i) 
HSV_SaturationSpinnerPosY = 107@(AdditionalVars,1i)

HSV_ValueDescriptionPosX = 108@(AdditionalVars,1i)
HSV_ValueDescriptionPosY = 109@(AdditionalVars,1i)
HSV_ValueFieldPosX = 110@(AdditionalVars,1i)
HSV_ValueFieldPosY = 111@(AdditionalVars,1i)
HSV_ValueSpinnerPosX = 112@(AdditionalVars,1i) 
HSV_ValueSpinnerPosY = 113@(AdditionalVars,1i)  

HSV_PalleteSelectedColorHue = 114@(AdditionalVars,1i)
HSV_PalleteSelectedColorSaturation = 115@(AdditionalVars,1i)
HSV_PalleteSelectedColorValue = 116@(AdditionalVars,1i)

HSV_PalleteSelectedOldColorRed = 117@(AdditionalVars,1i)
HSV_PalleteSelectedOldColorGreen = 118@(AdditionalVars,1i)
HSV_PalleteSelectedOldColorBlue = 119@(AdditionalVars,1i)

SaveButtonPosX = 120@(AdditionalVars,1i)
SaveButtonPosY = 121@(AdditionalVars,1i)
SaveButtonSizeX = 122@(AdditionalVars,1i)
SaveButtonSizeY = 123@(AdditionalVars,1i)

SaveTextPosX = 124@(AdditionalVars,1i)
SaveTextPosY =  125@(AdditionalVars,1i)

SunPropertiesTextPosX = 126@(AdditionalVars,1i)
SunPropertiesTextPosY = 127@(AdditionalVars,1i)       

SunCoreSizeDescriptionPosX = 128@(AdditionalVars,1i)
SunCoreSizeDescriptionPosY = 129@(AdditionalVars,1i)

SunCoreSizeFieldPosX = 130@(AdditionalVars,1i)
SunCoreSizeFieldPosY = 131@(AdditionalVars,1i)
SunCoreSizeFieldSizeX = 132@(AdditionalVars,1i)
SunCoreSizeFieldSizeY = 133@(AdditionalVars,1i)

SunCoreSizeSpinnerPosX = 134@(AdditionalVars,1i)
SunCoreSizeSpinnerPosY = 135@(AdditionalVars,1i)

SunCoronaSizeDescriptionPosX = 136@(AdditionalVars,1i)
SunCoronaSizeDescriptionPosY = 137@(AdditionalVars,1i)

SunCoronaSizeFieldPosX = 138@(AdditionalVars,1i)
SunCoronaSizeFieldPosY = 139@(AdditionalVars,1i)
SunCoronaSizeFieldSizeX = 140@(AdditionalVars,1i)
SunCoronaSizeFieldSizeY = 141@(AdditionalVars,1i)

SunCoronaSizeSpinnerPosX = 142@(AdditionalVars,1i)
SunCoronaSizeSpinnerPosY = 143@(AdditionalVars,1i)

SpriteBrightnessDescriptionPosX = 144@(AdditionalVars,1i)
SpriteBrightnessDescriptionPosY = 145@(AdditionalVars,1i)

SpriteBrightnessFieldPosX = 146@(AdditionalVars,1i)
SpriteBrightnessFieldPosY = 147@(AdditionalVars,1i)
SpriteBrightnessFieldSizeX = 148@(AdditionalVars,1i)
SpriteBrightnessFieldSizeY = 149@(AdditionalVars,1i)

SpriteBrightnessSpinnerPosX = 150@(AdditionalVars,1i)
SpriteBrightnessSpinnerPosY = 151@(AdditionalVars,1i)

// shadow properties
ShadowPropertiesTextPosX = 152@(AdditionalVars,1i)
ShadowPropertiesTextPosY = 153@(AdditionalVars,1i)       

ShadowIntensityDescriptionPosX = 154@(AdditionalVars,1i)
ShadowIntensityDescriptionPosY = 155@(AdditionalVars,1i)

ShadowIntensityFieldPosX = 156@(AdditionalVars,1i)
ShadowIntensityFieldPosY = 157@(AdditionalVars,1i)
ShadowIntensityFieldSizeX = 158@(AdditionalVars,1i)
ShadowIntensityFieldSizeY = 159@(AdditionalVars,1i)

ShadowIntensitySpinnerPosX = 160@(AdditionalVars,1i)
ShadowIntensitySpinnerPosY = 161@(AdditionalVars,1i)

LightShadingDescriptionPosX = 162@(AdditionalVars,1i)
LightShadingDescriptionPosY = 163@(AdditionalVars,1i)

LightShadingFieldPosX = 164@(AdditionalVars,1i)
LightShadingFieldPosY = 165@(AdditionalVars,1i)
LightShadingFieldSizeX = 166@(AdditionalVars,1i)
LightShadingFieldSizeY = 167@(AdditionalVars,1i)

LightShadingSpinnerPosX = 168@(AdditionalVars,1i)
LightShadingSpinnerPosY = 169@(AdditionalVars,1i)

PoleShadingDescriptionPosX = 170@(AdditionalVars,1i)
PoleShadingDescriptionPosY = 171@(AdditionalVars,1i)

PoleShadingFieldPosX = 172@(AdditionalVars,1i)
PoleShadingFieldPosY = 173@(AdditionalVars,1i)
PoleShadingFieldSizeX = 174@(AdditionalVars,1i)
PoleShadingFieldSizeY = 175@(AdditionalVars,1i)

PoleShadingSpinnerPosX = 176@(AdditionalVars,1i)
PoleShadingSpinnerPosY = 177@(AdditionalVars,1i)

// world properties
WorldPropertiesTextPosX = 178@(AdditionalVars,1i)
WorldPropertiesTextPosY = 179@(AdditionalVars,1i)       

FarClippingDescriptionPosX = 180@(AdditionalVars,1i)
FarClippingDescriptionPosY = 181@(AdditionalVars,1i)

FarClippingFieldPosX = 182@(AdditionalVars,1i)
FarClippingFieldPosY = 183@(AdditionalVars,1i)
FarClippingFieldSizeX = 184@(AdditionalVars,1i)
FarClippingFieldSizeY = 185@(AdditionalVars,1i)

FarClippingSpinnerPosX = 186@(AdditionalVars,1i)
FarClippingSpinnerPosY = 187@(AdditionalVars,1i)

FogStartDescriptionPosX = 188@(AdditionalVars,1i)
FogStartDescriptionPosY = 189@(AdditionalVars,1i)

FogStartFieldPosX = 190@(AdditionalVars,1i)
FogStartFieldPosY = 191@(AdditionalVars,1i)
FogStartFieldSizeX = 192@(AdditionalVars,1i)
FogStartFieldSizeY = 193@(AdditionalVars,1i)

FogStartSpinnerPosX = 194@(AdditionalVars,1i)
FogStartSpinnerPosY = 195@(AdditionalVars,1i)

LightOnGroundDescriptionPosX = 196@(AdditionalVars,1i)
LightOnGroundDescriptionPosY = 197@(AdditionalVars,1i)

LightOnGroundFieldPosX = 198@(AdditionalVars,1i)
LightOnGroundFieldPosY = 199@(AdditionalVars,1i)
LightOnGroundFieldSizeX = 200@(AdditionalVars,1i)
LightOnGroundFieldSizeY = 201@(AdditionalVars,1i)

LightOnGroundSpinnerPosX = 202@(AdditionalVars,1i)
LightOnGroundSpinnerPosY = 203@(AdditionalVars,1i)

// illumination
IlluminationDescriptionPosX = 204@(AdditionalVars,1i)
IlluminationDescriptionPosY = 205@(AdditionalVars,1i)

IlluminationFieldPosX = 206@(AdditionalVars,1i)
IlluminationFieldPosY = 207@(AdditionalVars,1i)
IlluminationFieldSizeX = 208@(AdditionalVars,1i)
IlluminationFieldSizeY = 209@(AdditionalVars,1i)

IlluminationSpinnerPosX = 210@(AdditionalVars,1i)
IlluminationSpinnerPosY = 211@(AdditionalVars,1i)

Timer_32_lastValue = 212@(AdditionalVars,1i)
Timer_33_lastValue = 213@(AdditionalVars,1i)

TimerAfterClicking = 214@(AdditionalVars,1i)

ReloadButtonPosX = 218@(AdditionalVars,1i)
ReloadButtonPosY = 219@(AdditionalVars,1i)
ReloadButtonSizeX = 220@(AdditionalVars,1i)
ReloadButtonSizeY = 221@(AdditionalVars,1i)

HourSpinnerPosX = 222@(AdditionalVars,1i)
HourSpinnerPosY = 223@(AdditionalVars,1i)
MinuteSpinnerPosX = 224@(AdditionalVars,1i)
MinuteSpinnerPosY = 225@(AdditionalVars,1i)

WriteIllumination = 226@(AdditionalVars,1i)

FontSizeX = 227@(AdditionalVars,1i)
FontSizeY = 228@(AdditionalVars,1i)
ComuniqueFontSizeX = 229@(AdditionalVars,1i)
ComuniqueFontSizeY = 230@(AdditionalVars,1i)

TimeStateButtonPosX = 231@(AdditionalVars,1i)
TimeStateButtonPosY = 232@(AdditionalVars,1i)
TimeStateButtonSizeX = 233@(AdditionalVars,1i)
TimeStateButtonSizeY = 234@(AdditionalVars,1i)

EnablePossibilityToStopTime = 235@(AdditionalVars,1i)

PanelPosX = 236@(AdditionalVars,1i)
PanelPosY = 237@(AdditionalVars,1i)
PanelSizeWidth = 238@(AdditionalVars,1i)    // + 20.0 = real panel width

CurrentCycleIntensityPosX = 239@(AdditionalVars,1i)
CurrentCycleIntensityPosY = 240@(AdditionalVars,1i) 
NextCycleIntensityPosX = 241@(AdditionalVars,1i)
NextCycleIntensityPosY = 242@(AdditionalVars,1i) 

RotateCameraKey = 243@(AdditionalVars,1i) 
MouseSensitivityAddress = 244@(AdditionalVars,1i)

DoesIniFileWork = 245@(AdditionalVars,1i)
end

const
CTimeCycle_Initialise = 0@(CTimecyc,1i)
Base0_CTimeCycle_Initialise = 0@(0@,1i)
_timeCycleStartHoursAddress = 1@(CTimecyc,1i)
Base0__timeCycleStartHoursAddress = 1@(0@,1i)
_timeCycleStartMinutesAddress = 2@(CTimecyc,1i)
Base0__timeCycleStartMinutesAddress = 2@(0@,1i)
CTimeCyc_AMBRedPool = 3@(CTimecyc,1i)
Base0_CTimeCyc_AMBRedPool = 3@(0@,1i)
CTimeCyc_AMBGreenPool = 4@(CTimecyc,1i)
Base0_CTimeCyc_AMBGreenPool = 4@(0@,1i)
CTimeCyc_AMBBluePool = 5@(CTimecyc,1i)
Base0_CTimeCyc_AMBBluePool = 5@(0@,1i)
CTimeCyc_AMB_OBJRedPool = 6@(CTimecyc,1i)
Base0_CTimeCyc_AMB_OBJRedPool = 6@(0@,1i)
CTimeCyc_AMB_OBJGreenPool = 7@(CTimecyc,1i)
Base0_CTimeCyc_AMB_OBJGreenPool = 7@(0@,1i)
CTimeCyc_AMB_OBJBluePool = 8@(CTimecyc,1i)
Base0_CTimeCyc_AMB_OBJBluePool = 8@(0@,1i)
CTimeCyc_SkyTopRedPool = 9@(CTimecyc,1i)
Base0_CTimeCyc_SkyTopRedPool = 9@(0@,1i)
CTimeCyc_SkyTopGreenPool = 10@(CTimecyc,1i)
Base0_CTimeCyc_SkyTopGreenPool = 10@(0@,1i)
CTimeCyc_SkyTopBluePool = 11@(CTimecyc,1i)
Base0_CTimeCyc_SkyTopBluePool = 11@(0@,1i)
CTimeCyc_SkyBotRedPool = 12@(CTimecyc,1i)
Base0_CTimeCyc_SkyBotRedPool = 12@(0@,1i)                                                      
CTimeCyc_SkyBotGreenPool = 13@(CTimecyc,1i)
Base0_CTimeCyc_SkyBotGreenPool = 13@(0@,1i)
CTimeCyc_SkyBotBluePool = 14@(CTimecyc,1i)
Base0_CTimeCyc_SkyBotBluePool = 14@(0@,1i)
CTimeCyc_SunCoreRedPool = 15@(CTimecyc,1i)
Base0_CTimeCyc_SunCoreRedPool = 15@(0@,1i)
CTimeCyc_SunCoreGreenPool = 16@(CTimecyc,1i)
Base0_CTimeCyc_SunCoreGreenPool = 16@(0@,1i)
CTimeCyc_SunCoreBluePool = 17@(CTimecyc,1i)
Base0_CTimeCyc_SunCoreBluePool = 17@(0@,1i)
CTimeCyc_SunCoronaRedPool = 18@(CTimecyc,1i)
Base0_CTimeCyc_SunCoronaRedPool = 18@(0@,1i)
CTimeCyc_SunCoronaGreenPool = 19@(CTimecyc,1i)
Base0_CTimeCyc_SunCoronaGreenPool = 19@(0@,1i)
CTimeCyc_SunCoronaBluePool = 20@(CTimecyc,1i)
Base0_CTimeCyc_SunCoronaBluePool = 20@(0@,1i)
CTimeCyc_SunszPool = 21@(CTimecyc,1i)
Base0_CTimeCyc_SunszPool = 21@(0@,1i)
CTimeCyc_SprszPool = 22@(CTimecyc,1i)
Base0_CTimeCyc_SprszPool = 22@(0@,1i)
CTimeCyc_SprzbghtPool = 23@(CTimecyc,1i)
Base0_CTimeCyc_SprzbghtPool = 23@(0@,1i)
CTimeCyc_ShdwPool = 24@(CTimecyc,1i)
Base0_CTimeCyc_ShdwPool = 24@(0@,1i)
CTimeCyc_LightShdPool = 25@(CTimecyc,1i)
Base0_CTimeCyc_LightShdPool = 25@(0@,1i)
CTimeCyc_PoleShdPool = 26@(CTimecyc,1i)
Base0_CTimeCyc_PoleShdPool = 26@(0@,1i)
CTimeCyc_FarClpPool = 27@(CTimecyc,1i)
Base0_CTimeCyc_FarClpPool = 27@(0@,1i)
CTimeCyc_FogStPool = 28@(CTimecyc,1i)
Base0_CTimeCyc_FogStPool = 28@(0@,1i)
CTimeCyc_LightOnGroundPool = 29@(CTimecyc,1i)
Base0_CTimeCyc_LightOnGroundPool = 29@(0@,1i)
CTimeCyc_LowCloudsRedPool = 30@(CTimecyc,1i)
Base0_CTimeCyc_LowCloudsRedPool = 30@(0@,1i)
CTimeCyc_LowCloudsGreenPool = 31@(CTimecyc,1i)
Base0_CTimeCyc_LowCloudsGreenPool = 31@(0@,1i)
CTimeCyc_LowCloudsBluePool = 32@(CTimecyc,1i)
Base0_CTimeCyc_LowCloudsBluePool = 32@(0@,1i)
CTimeCyc_BottomCloudsRedPool = 33@(CTimecyc,1i)
Base0_CTimeCyc_BottomCloudsRedPool = 33@(0@,1i)
CTimeCyc_BottomCloudsGreenPool = 34@(CTimecyc,1i)
Base0_CTimeCyc_BottomCloudsGreenPool = 34@(0@,1i)
CTimeCyc_BottomCloudsBluePool = 35@(CTimecyc,1i)
Base0_CTimeCyc_BottomCloudsBluePool = 35@(0@,1i)
CTimeCyc_WaterRedPool = 36@(CTimecyc,1i)
Base0_CTimeCyc_WaterRedPool = 36@(0@,1i)
CTimeCyc_WaterGreenPool = 37@(CTimecyc,1i)
Base0_CTimeCyc_WaterGreenPool = 37@(0@,1i)
CTimeCyc_WaterBluePool = 38@(CTimecyc,1i)
Base0_CTimeCyc_WaterBluePool = 38@(0@,1i)
CTimeCyc_WaterAlphaPool = 39@(CTimecyc,1i)
Base0_CTimeCyc_WaterAlphaPool = 39@(0@,1i)
CTimeCyc_ColourCorrect1AlphaPool = 40@(CTimecyc,1i)
Base0_CTimeCyc_ColourCorrect1AlphaPool = 40@(0@,1i)
CTimeCyc_ColourCorrect1RedPool = 41@(CTimecyc,1i)
Base0_CTimeCyc_ColourCorrect1RedPool = 41@(0@,1i)
CTimeCyc_ColourCorrect1GreenPool = 42@(CTimecyc,1i)
Base0_CTimeCyc_ColourCorrect1GreenPool = 42@(0@,1i)
CTimeCyc_ColourCorrect1BluePool = 43@(CTimecyc,1i)
Base0_CTimeCyc_ColourCorrect1BluePool = 43@(0@,1i)
CTimeCyc_ColourAdd2AlphaPool = 44@(CTimecyc,1i)
Base0_CTimeCyc_ColourAdd2AlphaPool = 44@(0@,1i)
CTimeCyc_ColourAdd2RedPool = 45@(CTimecyc,1i)
Base0_CTimeCyc_ColourAdd2RedPool = 45@(0@,1i)
CTimeCyc_ColourAdd2GreenPool = 46@(CTimecyc,1i)
Base0_CTimeCyc_ColourAdd2GreenPool = 46@(0@,1i)
CTimeCyc_ColourAdd2BluePool = 47@(CTimecyc,1i)
Base0_CTimeCyc_ColourAdd2BluePool = 47@(0@,1i)
CTimeCyc_LowCloudsAlphaPool = 48@(CTimecyc,1i)
Base0_CTimeCyc_LowCloudsAlphaPool = 48@(0@,1i)
CTimeCyc_UpperCloudsAlphaPool = 49@(CTimecyc,1i)
Base0_CTimeCyc_UpperCloudsAlphaPool = 49@(0@,1i)
CTimeCyc_UnusedCloudsAlphaPool = 50@(CTimecyc,1i)
Base0_CTimeCyc_UnusedCloudsAlphaPool = 50@(0@,1i)
CTimeCyc_IlluminationPool = 51@(CTimecyc,1i)
Base0_CTimeCyc_IlluminationPool = 51@(0@,1i)
end

jump @start
0662: NOP "In-game Timecyc Editor"
0662: NOP "Version: 1.6"
0662: NOP "Author: fastman92"
0662: NOP "Visit my site: fastman92.tk"
{$INCLUDE functions/Detect_EXE_version.txt}

const
SPINNER_ALL = 0
SPINNER_LEFT = 1
SPINNER_RIGHT = 2
SPINNER_TOP = 3
SPINNER_BOTTOM = 4
end
:SpinnerEvent_IsPressedSpecifiedPart
{
0@ - mode (0 = all, 1 = horizontal left, 2 = horizontal right, 3 = vertical top, 4 = vertical bottom)
1@ - spinnerPosX
2@ - spinnerPosY 
3@ - toPosX
4@ - toPosY 
5@ - spinnerSizeX
6@ - spinnerSizeY

Example: 
    if
    0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_TOP spinnerPosX 320.0 SpinnerY 320.0 ToPosX 330.0 ToPosY 400.0 spinnerSizeX 20.0 spinnerSizeY 20.0
}  
5@ /= 2.0                          
6@ /= 2.0
 
0871: init_jump_table 0@ total_jumps 5 default_jump 0 @SpinnerEvent_IsPressedSpecifiedPart_ALL jumps SPINNER_ALL @SpinnerEvent_IsPressedSpecifiedPart_ALL SPINNER_LEFT @SpinnerEvent_IsPressedSpecifiedPart_LEFT SPINNER_RIGHT @SpinnerEvent_IsPressedSpecifiedPart_RIGHT SPINNER_TOP @SpinnerEvent_IsPressedSpecifiedPart_TOP SPINNER_BOTTOM @SpinnerEvent_IsPressedSpecifiedPart_BOTTOM -1 @SpinnerEvent_IsPressedSpecifiedPart_ALL -1 @SpinnerEvent_IsPressedSpecifiedPart_ALL
    
:SpinnerEvent_IsPressedSpecifiedPart_ALL

0509: 1@ = distance_between_XY 1@ 0.0 and_XY 3@ 0.0
0509: 2@ = distance_between_XY 2@ 0.0 and_XY 4@ 0.0
if and
0035:   5@ >= 1@  // (float)
0035:   6@ >= 2@  // (float)
else_jump @SpinnerEvent_IsPressedSpecifiedPart_returnFalse
return_true
0AB2: ret 0

:SpinnerEvent_IsPressedSpecifiedPart_LEFT
0087: 7@ = 1@ // (float)
0063: 7@ -= 5@  // (float)

0509: 8@ = distance_between_XY 2@ 0.0 and_XY 4@ 0.0
                                           
if and
0035:   3@ >= 7@  // (float)
0025:   1@ > 3@  // (float)
0035:   6@ >= 8@  // (float)
else_jump @SpinnerEvent_IsPressedSpecifiedPart_returnFalse
return_true
0AB2: ret 0

:SpinnerEvent_IsPressedSpecifiedPart_RIGHT
0087: 7@ = 1@ // (float)
005B: 7@ += 5@  // (float)

0509: 8@ = distance_between_XY 2@ 0.0 and_XY 4@ 0.0

if and
0035:   3@ >= 1@  // (float)
0025:   7@ > 3@  // (float)
0035:   6@ >= 8@  // (float)
else_jump @SpinnerEvent_IsPressedSpecifiedPart_returnFalse
return_true
0AB2: ret 0

:SpinnerEvent_IsPressedSpecifiedPart_TOP
0509: 7@ = distance_between_XY 1@ 0.0 and_XY 3@ 0.0
0087: 8@ = 2@ // (float)
0063: 8@ -= 6@  // (float)

if and
0035:   4@ >= 8@  // (float)
0025:   2@ > 4@  // (float)
0035:   5@ >= 7@  // (float)
else_jump @SpinnerEvent_IsPressedSpecifiedPart_returnFalse
return_true
0AB2: ret 0

:SpinnerEvent_IsPressedSpecifiedPart_BOTTOM
0509: 7@ = distance_between_XY 1@ 0.0 and_XY 3@ 0.0
0087: 8@ = 2@ // (float)
005B: 8@ += 6@  // (float)

if and
0035:   4@ >= 2@  // (float)
0025:   8@ > 4@  // (float)
0035:   5@ >= 7@  // (float)
else_jump @SpinnerEvent_IsPressedSpecifiedPart_returnFalse
return_true
0AB2: ret 0

:SpinnerEvent_IsPressedSpecifiedPart_returnFalse
return_false
0AB2: ret 0

:start  
{$INCLUDE asm_functions/convertFloatToString.txt}
0AB1: call_scm_func @Get_EXE_version_ID 0 get_version_number_to GAME_VERSION
0AB1: call_scm_func @getScriptContentPointer 0 store_script_content SCRIPT_POINTER

0AB1: call_scm_func @getAdditionalVarsLabelPointedIndex 2 label @CTimecycAddresses divider 4 store_index_to CTimecyc
0AB1: call_scm_func @getAdditionalVarsLabelPointedIndex 2 label @AdditionalVariables divider 4 store_index_to AdditionalVars

0A99: chdir 0
    if and
    8AAB:  not file_exists "CLEO\GxtHook.cleo"
    0AAB:   file_exists "CLEO\IniFiles.cleo"
    0AAB:   file_exists IniFile
    then
    DoesIniFileWork = true      
    0AF0: 5@ = get_int_from_ini_file IniFile section "MAIN" key "RotateCameraKey"
    0085: RotateCameraKey = 5@ // (int)
       
    0AF4: 5@s = read_string_from_ini_file IniFile section "MAIN" key "EnablePossibilityToStopTime"
        
        if    
        0AB1: call_scm_func @IsStringTrue 2 string 5@ 6@
        then
        EnablePossibilityToStopTime = true
        gosub @Patch_CClock__Update            
        end  
    
    0AF4: 5@s = read_string_from_ini_file IniFile section "MAIN" key "WriteIlluminationInTimecycDat"  
    0AB1: call_scm_func @IsStringTrueResultToVar 2 string 5@ 6@ result_to 5@
    0085: WriteIllumination = 5@ // (int)
    else
    RotateCameraKey = 220   // slash
    EnablePossibilityToStopTime = true
    gosub @Patch_CClock__Update
    WriteIllumination = true 
    end   

0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0 index1 VERSION_1_0_US_CRACKED value1 0x5BBAC0 index2 VERSION_1_01_EURO_CRACKED value2 0x5BC2A0 store_value_to 5@
0085: CTimeCycle_Initialise = 5@ // (int)

0A8F: 5@ = SCRIPT_POINTER - @timecycStartHours // int
0A8F: 6@ = SCRIPT_POINTER - @timecycStartMinutes // int
0085: _timeCycleStartHoursAddress = 5@ // (int)
0085: _timeCycleStartMinutesAddress = 6@ // (int)
                                                                                      
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7C3C8 index2 VERSION_1_01_EURO_CRACKED value2 0xB7EA48 store_value_to 5@
0085: CTimeCyc_AMBRedPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7C310 index2 VERSION_1_01_EURO_CRACKED value2 0xB7E990 store_value_to 5@
0085: CTimeCyc_AMBGreenPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7C258 index2 VERSION_1_01_EURO_CRACKED value2 0xB7E8D8 store_value_to 5@
0085: CTimeCyc_AMBBluePool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7C1A0 index2 VERSION_1_01_EURO_CRACKED value2 0xB7E820 store_value_to 5@
0085: CTimeCyc_AMB_OBJRedPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7C0E8 index2 VERSION_1_01_EURO_CRACKED value2 0xB7E768 store_value_to 5@
0085: CTimeCyc_AMB_OBJGreenPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7C030 index2 VERSION_1_01_EURO_CRACKED value2 0xB7E6B0 store_value_to 5@
0085: CTimeCyc_AMB_OBJBluePool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7BF78 index2 VERSION_1_01_EURO_CRACKED value2 0xB7E5F8 store_value_to 5@
0085: CTimeCyc_SkyTopRedPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7BEC0 index2 VERSION_1_01_EURO_CRACKED value2 0xB7E540 store_value_to 5@
0085: CTimeCyc_SkyTopGreenPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7BE08 index2 VERSION_1_01_EURO_CRACKED value2 0xB7E488 store_value_to 5@
0085: CTimeCyc_SkyTopBluePool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7BD50 index2 VERSION_1_01_EURO_CRACKED value2 0xB7E3D0 store_value_to 5@
0085: CTimeCyc_SkyBotRedPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7BC98 index2 VERSION_1_01_EURO_CRACKED value2 0xB7E318 store_value_to 5@
0085: CTimeCyc_SkyBotGreenPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7BBE0 index2 VERSION_1_01_EURO_CRACKED value2 0xB7E260 store_value_to 5@
0085: CTimeCyc_SkyBotBluePool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7BB28 index2 VERSION_1_01_EURO_CRACKED value2 0xB7E1A8 store_value_to 5@
0085: CTimeCyc_SunCoreRedPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7BA70 index2 VERSION_1_01_EURO_CRACKED value2 0xB7E0F0 store_value_to 5@
0085: CTimeCyc_SunCoreGreenPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7B9B8 index2 VERSION_1_01_EURO_CRACKED value2 0xB7E038 store_value_to 5@
0085: CTimeCyc_SunCoreBluePool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7B900 index2 VERSION_1_01_EURO_CRACKED value2 0xB7DF80 store_value_to 5@
0085: CTimeCyc_SunCoronaRedPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7B848 index2 VERSION_1_01_EURO_CRACKED value2 0xB7DEC8 store_value_to 5@
0085: CTimeCyc_SunCoronaGreenPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7B790 index2 VERSION_1_01_EURO_CRACKED value2 0xB7DE10 store_value_to 5@
0085: CTimeCyc_SunCoronaBluePool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7B6D8 index2 VERSION_1_01_EURO_CRACKED value2 0xB7DD58 store_value_to 5@
0085: CTimeCyc_SunszPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7B620 index2 VERSION_1_01_EURO_CRACKED value2 0xB7DCA0 store_value_to 5@
0085: CTimeCyc_SprszPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7B568 index2 VERSION_1_01_EURO_CRACKED value2 0xB7DBE8 store_value_to 5@
0085: CTimeCyc_SprzbghtPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7B4B0 index2 VERSION_1_01_EURO_CRACKED value2 0xB7DB30 store_value_to 5@
0085: CTimeCyc_ShdwPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7B3F8 index2 VERSION_1_01_EURO_CRACKED value2 0xB7DA78 store_value_to 5@
0085: CTimeCyc_LightShdPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7B340 index2 VERSION_1_01_EURO_CRACKED value2 0xB7D9C0 store_value_to 5@
0085: CTimeCyc_PoleShdPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7B1D0 index2 VERSION_1_01_EURO_CRACKED value2 0xB7D850 store_value_to 5@
0085: CTimeCyc_FarClpPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7B060 index2 VERSION_1_01_EURO_CRACKED value2 0xB7D6E0 store_value_to 5@
0085: CTimeCyc_FogStPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7AFA8 index2 VERSION_1_01_EURO_CRACKED value2 0xB7D628 store_value_to 5@
0085: CTimeCyc_LightOnGroundPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7AEF0 index2 VERSION_1_01_EURO_CRACKED value2 0xB7D570 store_value_to 5@
0085: CTimeCyc_LowCloudsRedPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7AE38 index2 VERSION_1_01_EURO_CRACKED value2 0xB7D4B8 store_value_to 5@
0085: CTimeCyc_LowCloudsGreenPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7AD80 index2 VERSION_1_01_EURO_CRACKED value2 0xB7D400 store_value_to 5@
0085: CTimeCyc_LowCloudsBluePool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7ACC8 index2 VERSION_1_01_EURO_CRACKED value2 0xB7D348 store_value_to 5@
0085: CTimeCyc_BottomCloudsRedPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7AC10 index2 VERSION_1_01_EURO_CRACKED value2 0xB7D290 store_value_to 5@
0085: CTimeCyc_BottomCloudsGreenPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7AB58 index2 VERSION_1_01_EURO_CRACKED value2 0xB7D1D8 store_value_to 5@
0085: CTimeCyc_BottomCloudsBluePool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7AAA0 index2 VERSION_1_01_EURO_CRACKED value2 0xB7D120 store_value_to 5@
0085: CTimeCyc_WaterRedPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7A9E8 index2 VERSION_1_01_EURO_CRACKED value2 0xB7D068 store_value_to 5@
0085: CTimeCyc_WaterGreenPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7A930 index2 VERSION_1_01_EURO_CRACKED value2 0xB7CFB0 store_value_to 5@
0085: CTimeCyc_WaterBluePool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7A878 index2 VERSION_1_01_EURO_CRACKED value2 0xB7CEF8 store_value_to 5@
0085: CTimeCyc_WaterAlphaPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7A598 index2 VERSION_1_01_EURO_CRACKED value2 0xB7CE40 store_value_to 5@
0085: CTimeCyc_ColourCorrect1AlphaPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7A7C0 index2 VERSION_1_01_EURO_CRACKED value2 0xB7CE40 store_value_to 5@
0085: CTimeCyc_ColourCorrect1RedPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7A708 index2 VERSION_1_01_EURO_CRACKED value2 0xB7CD88 store_value_to 5@
0085: CTimeCyc_ColourCorrect1GreenPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7A650 index2 VERSION_1_01_EURO_CRACKED value2 0xB7CCD0 store_value_to 5@
0085: CTimeCyc_ColourCorrect1BluePool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7A2B8 index2 VERSION_1_01_EURO_CRACKED value2 0xB7C938 store_value_to 5@
0085: CTimeCyc_ColourAdd2AlphaPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7A4E0 index2 VERSION_1_01_EURO_CRACKED value2 0xB7CB60 store_value_to 5@
0085: CTimeCyc_ColourAdd2RedPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7A428 index2 VERSION_1_01_EURO_CRACKED value2 0xB7CAA8 store_value_to 5@
0085: CTimeCyc_ColourAdd2GreenPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7A370 index2 VERSION_1_01_EURO_CRACKED value2 0xB7C9F0 store_value_to 5@
0085: CTimeCyc_ColourAdd2BluePool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7A200 index2 VERSION_1_01_EURO_CRACKED value2 0xB7C880 store_value_to 5@
0085: CTimeCyc_LowCloudsAlphaPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7A148 index2 VERSION_1_01_EURO_CRACKED value2 0xB7C7C8 store_value_to 5@
0085: CTimeCyc_UpperCloudsAlphaPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB7A090 index2 VERSION_1_01_EURO_CRACKED value2 0xB7C710 store_value_to 5@
0085: CTimeCyc_UnusedCloudsAlphaPool = 5@ // (int)
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0  index1 VERSION_1_0_US_CRACKED value1 0xB79FD8 index2 VERSION_1_01_EURO_CRACKED value2 0xB7C658 store_value_to 5@
0085: CTimeCyc_IlluminationPool = 5@ // (int)

MainAlphaLevel = 255

0AB1: call_scm_func @GetAddress_sprintf 0 store_address_to 5@
0085: Sprintf = 5@ // (int)  

0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0 weatherLimit index1 VERSION_1_0_US_CRACKED value1 0x55F4B8 index2 VERSION_1_01_EURO_CRACKED value 0x55F958 store_value_to 5@ 
0A8D: 5@ = read_memory 5@ size 1 virtual_protect true
0085: WeatherAmountLimit = 5@ // (int)

0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0 _mouseInvert index1 VERSION_1_0_US_CRACKED value1 0xBA6744 index2 VERSION_1_01_EURO_CRACKED value 0xBA8DC4 store_value_to 5@

0085: _mouseInvertXAddress = 5@ // (int) 
5@ += 1
0085: _mouseInvertYAddress = 5@ // (int) 

0AB1: call_scm_func @GetAddress_weatherIDs 0 store_address_to 5@
0085: CWeather__LockedWeatherAddress = 5@ // (int)
5@ += 4
0085: CWeather__Upcoming_weatherAddress = 5@ // (int)
5@ += 4
0085: CWeather__CurrentWeatherAddress = 5@ // (int)

0AB1: call_scm_func @GetAddress_mouseSensitivity 0 store_address_to 5@
0085: MouseSensitivityAddress = 5@ // (int)

:TimecycEditor
wait 0
if
 gosub @TestTimecycCheat
else_jump @TimecycEditor
       
TimerAfterClicking = 0

0390: load_txd_dictionary 'timecyc'
038F: load_texture "cursor" as TEXTURE_CURSOR       // Load dictionary with 0390 first
038F: load_texture "spinner" as TEXTURE_SPINNER   // Load dictionary with 0390 first
038F: load_texture "hsvPallete" as TEXTURE_HSV_PALLETE   // Load dictionary with 0390 first
038F: load_texture "needle" as TEXTURE_NEEDLE  // Load dictionary with 0390 first
038F: load_texture "save" as TEXTURE_SAVE  // Load dictionary with 0390 first
038F: load_texture "reload" as TEXTURE_RELOAD  // Load dictionary with 0390 first
038F: load_texture "time_disabled" as TEXTURE_TIME_DISABLED  // Load dictionary with 0390 first
038F: load_texture "time_enabled" as TEXTURE_TIME_ENABLED  // Load dictionary with 0390 first
                          
PanelPage = 1
PanelSection = 1
CurrentResolutionX = 0

// Our script
    while true
    0085: Timer_32_lastValue = 32@ // (int)
    0085: Timer_33_lastValue = 33@ // (int)
    wait 0
   
    if
      gosub @TestTimecycCheat
    else_jump @TimecycEditorLoop;
    jump break;
    
    :TimecycEditorLoop  

        if
        0AB0:   key_pressed RotateCameraKey
        then
        LockCursor = true
        003E: overwrite_camera_movement_state 2
        else
        LockCursor = false
        003E: overwrite_camera_movement_state 1
        end           
              
    gosub @IncreaseIndividualTimers
        
    0AB1: call_scm_func @GetCurrentResolution 0 X_size 5@ Y_size 6@
        if or    
        803B:  not CurrentResolutionX == 5@  // (int)     
        803B:  not CurrentResolutionY == 6@  // (int)
        then
        0085: CurrentResolutionX = 5@ // (int)
        0085: CurrentResolutionY = 6@ // (int)
        gosub @RescaleAllObjects 
                         
        08D7: 5@ = panel PanelHandle active_row
        0085: TemporaryVariable_1 = 5@ // (int)                    

        08DA: remove_panel PanelHandle        
        gosub @CreateMenuPanel
        
            if
            TemporaryVariable_1 <> -99
            then
            090E: set_panel PanelHandle active_row TemporaryVariable_1
            end                    
        end        
    
               
    03F0: enable_text_draw 1
    gosub @ActionAlways
     
    gosub @ProcessTimecycMenuOptions  
    gosub @MouseSupport                              
    end    

003E: overwrite_camera_movement_state 0
gosub @PlayerUnlock
08DA: remove_panel PanelHandle
0391: release_textures
01B7: release_weather                   
jump @TimecycEditor

:TestTimecycCheat           
0AB1: call_scm_func @TestCheatString 2 STRING 0x454D4954 0x435943   // TIMECYC
return

:IncreaseIndividualTimers
0A8F: 5@ = 32@ - Timer_32_lastValue // int          
005A: TimerAfterClicking += 5@  // (int)
0062: ComuniqueTextTimer -= 5@  // (int) 
return

:Patch_CClock__Update
// CClock patch    
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0 index1 VERSION_1_0_US_CRACKED value1 0x0052CF10 index2 VERSION_1_01_EURO_CRACKED value2 0x004BC2C0 store_value_to 5@
0AB1: call_scm_func @asm_PutOnAddressJmpFarToLabel 4 script_content SCRIPT_POINTER source_address 5@ source_virtual_protect true destination @CClock__Update_part
        
0AB1: call_scm_func @asm_PutOnLabelAbsoluteAddressToLabel 3 script_content SCRIPT_POINTER source_label @CClock__Update_cmp_IsTimeStoppedAddress destination @IsTimeStopped
0AB1: call_scm_func @asm_PutOnLabelRelativeAddressToLabel 4 script_content SCRIPT_POINTER source_label @CClock__Update_jnz_isTimeStoppedActive_setLastClockTicktoSystemTimeAddress source_size 4 destination @CClock__Update_setLastClockTicktoSystemTime
        
0AB1: call_scm_func @ArrayGetValueByIndex num_params 7 index GAME_VERSION total_values 2 default_value 0 index1 VERSION_1_0_US_CRACKED value1 0x0052CF17 index2 VERSION_1_01_EURO_CRACKED value2 0x04BC2C7 store_value_to 5@
0AB1: call_scm_func @asm_PutOnLabelRelativeAddressToAddress 4 script_content SCRIPT_POINTER source_label @CClock__Update_jmp_backAddress source_size 4 destination 5@
        
0AB1: call_scm_func @GetAddress_CGame__SystemTime 0 store_address_to 5@
0AB1: call_scm_func @asm_PutOnLabelAbsoluteAddressToAddress 4 script_content SCRIPT_POINTER source_label @CClock__Update_mov_eax_CGame__SystemTimeAddress source_size 4 destination 5@
        
0AB1: call_scm_func @GetAddress_CClock__ms_nLastClockTick 0 store_address_to 5@
0AB1: call_scm_func @asm_PutOnLabelAbsoluteAddressToAddress 4 script_content SCRIPT_POINTER source_label @CClock__Update_mov_CClock__ms_nLastClockTick_eax_Address source_size 4 destination 5@
0AB1: call_scm_func @asm_PutOnLabelAbsoluteAddressToAddress 4 script_content SCRIPT_POINTER source_label @CClock__Update_mov_esi_CClock__ms_nLastClockTickAddress source_size 4 destination 5@
return

:RescaleAllObjects
0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize SpinnerValueSizeX YSize SpinnerValueSizeY store_XSize 5@ store_YSize 6@

0087: XSpinnerSizeX = 5@ // (float)
0087: XSpinnerSizeY = 6@ // (float)

0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize 0.6 YSize 1.8 store_XSize 5@ store_YSize 6@
0087: ComuniqueFontSizeX = 5@ // (float)
0087: ComuniqueFontSizeY = 6@ // (float)
                                                 
0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize 0.4 YSize 1.2 store_XSize 5@ store_YSize 6@
0087: FontSizeX = 5@ // (float)
0087: FontSizeY = 6@ // (float)

// texture actions
0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize 32.0 YSize 32.0 store_XSize 5@ store_YSize 6@
0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize 10.0 YSize 0.0 store_XSize 7@ store_YSize 8@
0087: SaveButtonSizeX = 5@ // (float)
0087: SaveButtonSizeY = 6@ // (float)
5@ /= 2.0
6@ /= 2.0
SaveButtonPosX = 560.0
SaveButtonPosY = 370.0    
0087: SaveTextPosX = SaveButtonPosX // (float)
005B: SaveButtonPosX += 5@  // (float)
005B: SaveButtonPosY += 6@  // (float)

0087: SaveTextPosY = SaveButtonPosY // (float) 
005B: SaveTextPosY += 6@  // (float)

// reload button 
0087: ReloadButtonPosX = SaveButtonSizeX // (float)
005B: ReloadButtonPosX += SaveButtonPosX  // (float)
005B: ReloadButtonPosX += 7@  // (float)
0087: ReloadButtonPosY = SaveButtonPosY // (float) 
0087: ReloadButtonSizeX = SaveButtonSizeX // (float)
0087: ReloadButtonSizeY = SaveButtonSizeY // (float)

WeatherSpinnerPosX = 23.0
WeatherSpinnerPosY = 45.0

WeatherNameFieldSizeX = 300.0
0087: WeatherNameFieldSizeY = XSpinnerSizeY // (float)

0087: WeatherNameFieldPosY = WeatherSpinnerPosY // (float)

0087: WeatherNameFieldPosX = XSpinnerSizeX // (float)
WeatherNameFieldPosX /= 2.0
005B: WeatherNameFieldPosX += WeatherSpinnerPosX  // (float)
0087: 5@ = WeatherNameFieldSizeX // (float)
5@ /= 2.0
005B: WeatherNameFieldPosX += 5@  // (float)

0087: WeatherNameTextPosX = WeatherNameFieldPosX // (float)
0063: WeatherNameTextPosX -= 5@  // (float)
WeatherNameTextPosX += 3.0

0087: WeatherNameTextPosY = WeatherNameFieldPosY // (float)
0087: 5@ = WeatherNameFieldSizeY // (float)
5@ /= 2.0
0063: WeatherNameTextPosY -= 5@  // (float)

// Cycle spinner
0087: CycleSpinnerPosX = WeatherSpinnerPosX // (float)
0087: CycleSpinnerPosY = WeatherSpinnerPosY // (float)
CycleSpinnerPosY += 20.0

// Cycle field
CycleNameFieldSizeX = 300.0
0087: CycleNameFieldSizeY = XSpinnerSizeY // (float)

0087: CycleNameFieldPosY = CycleSpinnerPosY // (float)

0087: CycleNameFieldPosX = XSpinnerSizeX // (float)
CycleNameFieldPosX /= 2.0
005B: CycleNameFieldPosX += CycleSpinnerPosX  // (float)

0087: 5@ = CycleNameFieldSizeX // (float)
5@ /= 2.0
005B: CycleNameFieldPosX += 5@  // (float)

0087: CycleNameTextPosX = CycleNameFieldPosX // (float)
0063: CycleNameTextPosX -= 5@  // (float)
CycleNameTextPosX += 3.0

0087: CycleNameTextPosY = CycleNameFieldPosY // (float)
0087: 5@ = CycleNameFieldSizeY // (float)
5@ /= 2.0
0063: CycleNameTextPosY -= 5@  // (float)

HourSpinnerPosX = 558.0
HourSpinnerPosY = 16.0
MinuteSpinnerPosX = 595.0
0087: MinuteSpinnerPosY = HourSpinnerPosY // (float)

0AB1: call_scm_func @GetXYSizeInScreenScaleByUserResolution 2 XSizePixels 13.3 YSizePixels 24.9 store_XSize 5@ store_YSize 6@
0087: TimeStateButtonSizeX = 5@ // (float)
0087: TimeStateButtonSizeY = 6@ // (float) 

  
0087: TimeStateButtonPosX = HourSpinnerPosX // (float)
005B: TimeStateButtonPosX += MinuteSpinnerPosX  // (float)
TimeStateButtonPosX /= 2.0

0087: TimeStateButtonPosY = HourSpinnerPosY // (float)
{
0087: TimeStateButtonPosY = XSpinnerSizeX // (float)
TimeStateButtonPosY /= 2.0
005B: TimeStateButtonPosY += HourSpinnerPosY  // (float)
6@ /= 2.0
0063: TimeStateButtonPosY -= 6@  // (float)
}

///////////////

CursorPosX = 320.0
CursorPosY = 224.0

0AB1: call_scm_func @GetXYSizeInScreenScaleByUserResolution 2 XSizePixels 20.0 YSizePixels 20.0 store_XSize 5@ store_YSize 6@
0087: CursorSizeX = 5@ // (float)
0087: CursorSizeY = 6@ // (float)       

// color box
0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize HSV_ColorboxBorderValueSizeX YSize HSV_ColorboxBorderValueSizeY store_XSize 5@ store_YSize 6@
0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize 2.0 YSize 2.0 store_XSize 7@ store_YSize 8@      
0087: HSV_ColorBoxSizeX = 5@ // (float)
0087: HSV_ColorBoxSizeY = 6@ // (float)

005B: 5@ += 7@  // (float)
005B: 6@ += 8@  // (float)
0087: 7@ = 5@ // (float)
0087: 8@ = 6@ // (float)
5@ /= 2.0 
6@ /= 2.0 

HSV_ColorBoxPosX = 150.0
HSV_ColorBoxPosY = 350.0
005B: HSV_ColorBoxPosX += 5@  // (float)
005B: HSV_ColorBoxPosY += 6@  // (float)
    
0087: HSV_ColorBoxBorderSizeX = 7@ // (float)
0087: HSV_ColorBoxBorderSizeY = 8@ // (float)

// needle
0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize 4.0 YSize 4.0 store_XSize 5@ store_YSize 6@
0087: HSV_NeedleSizeX = 5@ // (float)
0087: HSV_NeedleSizeY = 6@ // (float)

// pallete
0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize 90.0 YSize 90.0 store_XSize 5@ store_YSize 6@

0087: HSV_PalleteSizeX = 5@ // (float)
0087: HSV_PalleteSizeY = 6@ // (float)
5@ /= 2.0
6@ /= 2.0

0087: HSV_PalleteAcceptanceRadiusX = 5@ // (float)
0087: HSV_PalleteAcceptanceRadiusY = 6@ // (float)
HSV_PalleteAcceptanceRadiusX *= 1.1
HSV_PalleteAcceptanceRadiusY *= 1.1

0087: HSV_PalletePosX = HSV_ColorBoxSizeX // (float)
HSV_PalletePosX /= 2.0
005B: HSV_PalletePosX += HSV_ColorBoxPosX  // (float)
005B: HSV_PalletePosX += 5@  // (float)
HSV_PalletePosX += 10.0

// Y
0087: HSV_PalletePosY = HSV_ColorBoxSizeY // (float)
HSV_PalletePosY /= -2.0
005B: HSV_PalletePosY += 6@  // (float)
005B: HSV_PalletePosY += HSV_ColorBoxPosY  // (float)

// Regulators 
0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize RegulationTextDistanceRelativeToPalleteValueX YSize DistanceTextUnderTextValueY store_XSize 5@ store_YSize 6@
0087: HSV_RGBTextX = HSV_PalleteSizeX // (float)
HSV_RGBTextX /= 2.0
005B: HSV_RGBTextX += HSV_PalletePosX  // (float) 
005B: HSV_RGBTextX += 5@  // (float)         

0087: HSV_RGBTextY = HSV_PalleteSizeY // (float)
HSV_RGBTextY /= -2.0
005B: HSV_RGBTextY += HSV_PalletePosY  // (float)

0087: HSV_RedDescriptionPosX = HSV_RGBTextX // (float)
0087: HSV_RedDescriptionPosY = HSV_RGBTextY // (float)
005B: HSV_RedDescriptionPosY += XSpinnerSizeY  // (float)
005B: HSV_RedDescriptionPosY += 6@  // (float)

0087: HSV_GreenDescriptionPosX = HSV_RGBTextX // (float)
0087: HSV_GreenDescriptionPosY = HSV_RedDescriptionPosY // (float)
005B: HSV_GreenDescriptionPosY += XSpinnerSizeY  // (float)
005B: HSV_GreenDescriptionPosY += 6@  // (float)

0087: HSV_BlueDescriptionPosX = HSV_RGBTextX // (float)
0087: HSV_BlueDescriptionPosY = HSV_GreenDescriptionPosY // (float)
005B: HSV_BlueDescriptionPosY += XSpinnerSizeY  // (float)
005B: HSV_BlueDescriptionPosY += 6@  // (float)

0087: HSV_AlphaDescriptionPosX = HSV_RGBTextX // (float)
0087: HSV_AlphaDescriptionPosY = HSV_BlueDescriptionPosY // (float)
005B: HSV_AlphaDescriptionPosY += XSpinnerSizeY  // (float)
005B: HSV_AlphaDescriptionPosY += 6@  // (float)

// RGB fields
0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize RegulationFieldDistanceRelativeToTextValueX YSize 0.0 store_XSize 5@ store_YSize 6@
0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize ByteRegulationFieldValueSizeX YSize 0.0 store_XSize 6@ store_YSize 7@
0087: HSV_FieldSizeX = 6@ // (float)
0087: HSV_FieldSizeY = XSpinnerSizeY // (float)

0087: 7@ = XSpinnerSizeY // (float)
7@ /= 2.0
0087: HSV_RedFieldPosX = HSV_RedDescriptionPosX // (float)
005B: HSV_RedFieldPosX += 5@  // (float)
0087: HSV_RedFieldPosY = HSV_RedDescriptionPosY // (float)
005B: HSV_RedFieldPosY += 7@  // (float)

// green
0087: HSV_GreenFieldPosX = HSV_GreenDescriptionPosX // (float)
005B: HSV_GreenFieldPosX += 5@  // (float)
0087: HSV_GreenFieldPosY = HSV_GreenDescriptionPosY // (float)
005B: HSV_GreenFieldPosY += 7@  // (float)

// blue
0087: HSV_BlueFieldPosX = HSV_BlueDescriptionPosX // (float)
005B: HSV_BlueFieldPosX += 5@  // (float)
0087: HSV_BlueFieldPosY = HSV_BlueDescriptionPosY // (float)
005B: HSV_BlueFieldPosY += 7@  // (float)

// alpha
0087: HSV_AlphaFieldPosX = HSV_AlphaDescriptionPosX // (float)
005B: HSV_AlphaFieldPosX += 5@  // (float)
0087: HSV_AlphaFieldPosY = HSV_AlphaDescriptionPosY // (float)
005B: HSV_AlphaFieldPosY += 7@  // (float)

// spinners
// red
0087: HSV_RedSpinnerPosX = HSV_FieldSizeX // (float)
HSV_RedSpinnerPosX /= 2.0
005B: HSV_RedSpinnerPosX += HSV_RedFieldPosX  // (float)

0087: 7@ = XSpinnerSizeX // (float)
7@ /= 2.0
005B: HSV_RedSpinnerPosX += 7@  // (float)

0087: HSV_RedSpinnerPosY = HSV_RedFieldPosY // (float)

// green
0087: HSV_GreenSpinnerPosX = HSV_FieldSizeX // (float)
HSV_GreenSpinnerPosX /= 2.0
005B: HSV_GreenSpinnerPosX += HSV_GreenFieldPosX  // (float)

005B: HSV_GreenSpinnerPosX += 7@  // (float)

0087: HSV_GreenSpinnerPosY = HSV_GreenFieldPosY // (float)

// blue
0087: HSV_BlueSpinnerPosX = HSV_FieldSizeX // (float)
HSV_BlueSpinnerPosX /= 2.0
005B: HSV_BlueSpinnerPosX += HSV_BlueFieldPosX  // (float)

005B: HSV_BlueSpinnerPosX += 7@  // (float)

0087: HSV_BlueSpinnerPosY = HSV_BlueFieldPosY // (float)

// alpha
0087: HSV_AlphaSpinnerPosX = HSV_FieldSizeX // (float)
HSV_AlphaSpinnerPosX /= 2.0
005B: HSV_AlphaSpinnerPosX += HSV_AlphaFieldPosX  // (float)

005B: HSV_AlphaSpinnerPosX += 7@  // (float)

0087: HSV_AlphaSpinnerPosY = HSV_AlphaFieldPosY // (float)

// HSV fields
0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize RegulationTextDistanceRelativeToPalleteValueX YSize DistanceTextUnderTextValueY store_XSize 5@ store_YSize 6@
0087: HSV_HSVTextX = XSpinnerSizeX // (float)
HSV_HSVTextX /= 2.0
005B: HSV_HSVTextX += HSV_RedSpinnerPosX  // (float)
005B: HSV_HSVTextX += 5@  // (float) 
0087: HSV_HSVTextY = HSV_RGBTextY // (float)

// hue
0087: HSV_HueDescriptionPosX = HSV_HSVTextX // (float)
0087: HSV_HueDescriptionPosY = HSV_HSVTextY // (float)
005B: HSV_HueDescriptionPosY += XSpinnerSizeY  // (float)
005B: HSV_HueDescriptionPosY += 6@  // (float) 

// saturation
0087: HSV_SaturationDescriptionPosX = HSV_HueDescriptionPosX // (float)
0087: HSV_SaturationDescriptionPosY = HSV_HueDescriptionPosY // (float)
005B: HSV_SaturationDescriptionPosY += XSpinnerSizeY  // (float)
005B: HSV_SaturationDescriptionPosY += 6@  // (float)

// value
0087: HSV_ValueDescriptionPosX = HSV_SaturationDescriptionPosX // (float)
0087: HSV_ValueDescriptionPosY = HSV_SaturationDescriptionPosY // (float)
005B: HSV_ValueDescriptionPosY += XSpinnerSizeY  // (float)
005B: HSV_ValueDescriptionPosY += 6@  // (float) 

// HSV fields
0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize RegulationFieldDistanceRelativeToTextValueX YSize 0.0 store_XSize 5@ store_YSize 6@
0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize ByteRegulationFieldValueSizeX YSize 0.0 store_XSize 6@ store_YSize 7@

0087: 7@ = XSpinnerSizeY // (float)
7@ /= 2.0
0087: HSV_HueFieldPosX = HSV_HueDescriptionPosX // (float)
005B: HSV_HueFieldPosX += 5@  // (float)
0087: HSV_HueFieldPosY = HSV_HueDescriptionPosY // (float)
005B: HSV_HueFieldPosY += 7@  // (float)

0087: HSV_SaturationFieldPosX = HSV_SaturationDescriptionPosX // (float)
005B: HSV_SaturationFieldPosX += 5@  // (float)
0087: HSV_SaturationFieldPosY = HSV_SaturationDescriptionPosY // (float)
005B: HSV_SaturationFieldPosY += 7@  // (float)

0087: HSV_ValueFieldPosX = HSV_ValueDescriptionPosX // (float)
005B: HSV_ValueFieldPosX += 5@  // (float)
0087: HSV_ValueFieldPosY = HSV_ValueDescriptionPosY // (float)
005B: HSV_ValueFieldPosY += 7@  // (float)

// HSV spinners
0087: HSV_HueSpinnerPosX = HSV_FieldSizeX // (float)
HSV_HueSpinnerPosX /= 2.0
005B: HSV_HueSpinnerPosX += HSV_HueFieldPosX  // (float)

0087: 7@ = XSpinnerSizeX // (float)
7@ /= 2.0
005B: HSV_HueSpinnerPosX += 7@  // (float)

0087: HSV_HueSpinnerPosY = HSV_HueFieldPosY // (float)

// saturation
0087: HSV_SaturationSpinnerPosX = HSV_FieldSizeX // (float)
HSV_SaturationSpinnerPosX /= 2.0
005B: HSV_SaturationSpinnerPosX += HSV_SaturationFieldPosX  // (float)

005B: HSV_SaturationSpinnerPosX += 7@  // (float)

0087: HSV_SaturationSpinnerPosY = HSV_SaturationFieldPosY // (float)

// value
0087: HSV_ValueSpinnerPosX = HSV_FieldSizeX // (float)
HSV_ValueSpinnerPosX /= 2.0
005B: HSV_ValueSpinnerPosX += HSV_ValueFieldPosX  // (float)

005B: HSV_ValueSpinnerPosX += 7@  // (float)

0087: HSV_ValueSpinnerPosY = HSV_ValueFieldPosY // (float)
// End of regulators

// under box
0087: 5@ = HSV_ColorBoxPosX // (float)
0087: 6@ = HSV_ColorBoxSizeX // (float)
6@ /= 2.0
0063: 5@ -= 6@  // (float)

0087: 6@ = HSV_FieldSizeX // (float)
6@ /= 2.0
005B: 6@ += HSV_HueSpinnerPosX  // (float)

0087: HSV_UnderBoxSizeX = 6@ // (float)
0063: HSV_UnderBoxSizeX -= 5@  // (float)

0087: HSV_UnderBoxPosX = 6@ // (float)
005B: HSV_UnderBoxPosX += 5@  // (float)
HSV_UnderBoxPosX /= 2.0
  
0087: HSV_UnderBoxPosY = HSV_PalletePosY // (float)
0087: HSV_UnderBoxSizeY = HSV_PalleteSizeY // (float)

0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize 17.0 YSize 17.0 store_XSize 5@ store_YSize 6@ 
005B: HSV_UnderBoxSizeX += 5@  // (float) 
005B: HSV_UnderBoxSizeY += 6@  // (float)

// Sun properties
0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize FloatRegulationFieldValueSizeX YSize DistanceTextUnderTextValueY store_XSize 5@ store_YSize 6@
0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize 140.0 YSize 0.0 store_XSize 7@ store_YSize 8@
0087: 8@ = XSpinnerSizeX // (float)
8@ /= 2.0

SunPropertiesTextPosX = 280.0
SunPropertiesTextPosY = 345.0

0087: SunCoreSizeDescriptionPosX = SunPropertiesTextPosX // (float)
0087: SunCoreSizeDescriptionPosY = SunPropertiesTextPosY // (float)
005B: SunCoreSizeDescriptionPosY += XSpinnerSizeY  // (float)
005B: SunCoreSizeDescriptionPosY += 6@  // (float)

0087: SunCoreSizeFieldSizeX = 5@ // (float) 
0087: SunCoreSizeFieldSizeY = XSpinnerSizeY // (float)  
0087: SunCoreSizeFieldPosX = SunCoreSizeDescriptionPosX // (float)
005B: SunCoreSizeFieldPosX += 7@  // (float)
0087: SunCoreSizeFieldPosY = SunCoreSizeDescriptionPosY // (float)
005B: SunCoreSizeFieldPosY += 8@  // (float)

0087: SunCoreSizeSpinnerPosX = SunCoreSizeFieldSizeX // (float)
SunCoreSizeSpinnerPosX /= 2.0
005B: SunCoreSizeSpinnerPosX += SunCoreSizeFieldPosX  // (float)
005B: SunCoreSizeSpinnerPosX += 8@  // (float)

0087: SunCoreSizeSpinnerPosY = SunCoreSizeFieldPosY // (float)

// corona
0087: SunCoronaSizeDescriptionPosX = SunCoreSizeDescriptionPosX // (float)
0087: SunCoronaSizeDescriptionPosY = SunCoreSizeDescriptionPosY // (float)
005B: SunCoronaSizeDescriptionPosY += XSpinnerSizeY  // (float)
005B: SunCoronaSizeDescriptionPosY += 6@  // (float)

0087: SunCoronaSizeFieldSizeX = 5@ // (float) 
0087: SunCoronaSizeFieldSizeY = XSpinnerSizeY // (float)  
0087: SunCoronaSizeFieldPosX = SunCoreSizeDescriptionPosX // (float)
005B: SunCoronaSizeFieldPosX += 7@  // (float)
0087: SunCoronaSizeFieldPosY = SunCoronaSizeDescriptionPosY // (float)
005B: SunCoronaSizeFieldPosY += 8@  // (float)

0087: SunCoronaSizeSpinnerPosX = SunCoronaSizeFieldSizeX // (float)
SunCoronaSizeSpinnerPosX /= 2.0
005B: SunCoronaSizeSpinnerPosX += SunCoronaSizeFieldPosX  // (float)
005B: SunCoronaSizeSpinnerPosX += 8@  // (float)

0087: SunCoronaSizeSpinnerPosY = SunCoronaSizeFieldPosY // (float)

// sprite brightness
0087: SpriteBrightnessDescriptionPosX = SunCoronaSizeDescriptionPosX // (float)
0087: SpriteBrightnessDescriptionPosY = SunCoronaSizeDescriptionPosY // (float)
005B: SpriteBrightnessDescriptionPosY += XSpinnerSizeY  // (float)
005B: SpriteBrightnessDescriptionPosY += 6@  // (float)

0087: SpriteBrightnessFieldSizeX = 5@ // (float) 
0087: SpriteBrightnessFieldSizeY = XSpinnerSizeY // (float)  
0087: SpriteBrightnessFieldPosX = SunCoronaSizeDescriptionPosX // (float)
005B: SpriteBrightnessFieldPosX += 7@  // (float)
0087: SpriteBrightnessFieldPosY = SpriteBrightnessDescriptionPosY // (float)
005B: SpriteBrightnessFieldPosY += 8@  // (float)

0087: SpriteBrightnessSpinnerPosX = SpriteBrightnessFieldSizeX // (float)
SpriteBrightnessSpinnerPosX /= 2.0
005B: SpriteBrightnessSpinnerPosX += SpriteBrightnessFieldPosX  // (float)
005B: SpriteBrightnessSpinnerPosX += 8@  // (float)

0087: SpriteBrightnessSpinnerPosY = SpriteBrightnessFieldPosY // (float)

// shadow properties
0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize FloatRegulationFieldValueSizeX YSize DistanceTextUnderTextValueY store_XSize 5@ store_YSize 6@
0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize 155.0 YSize 0.0 store_XSize 7@ store_YSize 8@
0087: 8@ = XSpinnerSizeX // (float)
8@ /= 2.0

ShadowPropertiesTextPosX = 280.0
ShadowPropertiesTextPosY = 345.0

0087: ShadowIntensityDescriptionPosX = ShadowPropertiesTextPosX // (float)
0087: ShadowIntensityDescriptionPosY = ShadowPropertiesTextPosY // (float)
005B: ShadowIntensityDescriptionPosY += XSpinnerSizeY  // (float)
005B: ShadowIntensityDescriptionPosY += 6@  // (float)

0087: ShadowIntensityFieldSizeX = 5@ // (float) 
0087: ShadowIntensityFieldSizeY = XSpinnerSizeY // (float)  
0087: ShadowIntensityFieldPosX = ShadowIntensityDescriptionPosX // (float)
005B: ShadowIntensityFieldPosX += 7@  // (float)
0087: ShadowIntensityFieldPosY = ShadowIntensityDescriptionPosY // (float)
005B: ShadowIntensityFieldPosY += 8@  // (float)

0087: ShadowIntensitySpinnerPosX = ShadowIntensityFieldSizeX // (float)
ShadowIntensitySpinnerPosX /= 2.0
005B: ShadowIntensitySpinnerPosX += ShadowIntensityFieldPosX  // (float)
005B: ShadowIntensitySpinnerPosX += 8@  // (float)

0087: ShadowIntensitySpinnerPosY = ShadowIntensityFieldPosY // (float)

// light shading
0087: LightShadingDescriptionPosX = ShadowIntensityDescriptionPosX // (float)
0087: LightShadingDescriptionPosY = ShadowIntensityDescriptionPosY // (float)
005B: LightShadingDescriptionPosY += XSpinnerSizeY  // (float)
005B: LightShadingDescriptionPosY += 6@  // (float)

0087: LightShadingFieldSizeX = 5@ // (float) 
0087: LightShadingFieldSizeY = XSpinnerSizeY // (float)  
0087: LightShadingFieldPosX = ShadowIntensityDescriptionPosX // (float)
005B: LightShadingFieldPosX += 7@  // (float)
0087: LightShadingFieldPosY = LightShadingDescriptionPosY // (float)
005B: LightShadingFieldPosY += 8@  // (float)

0087: LightShadingSpinnerPosX = LightShadingFieldSizeX // (float)
LightShadingSpinnerPosX /= 2.0
005B: LightShadingSpinnerPosX += LightShadingFieldPosX  // (float)
005B: LightShadingSpinnerPosX += 8@  // (float)

0087: LightShadingSpinnerPosY = LightShadingFieldPosY // (float)

// pole shading
0087: PoleShadingDescriptionPosX = LightShadingDescriptionPosX // (float)
0087: PoleShadingDescriptionPosY = LightShadingDescriptionPosY // (float)
005B: PoleShadingDescriptionPosY += XSpinnerSizeY  // (float)
005B: PoleShadingDescriptionPosY += 6@  // (float)

0087: PoleShadingFieldSizeX = 5@ // (float) 
0087: PoleShadingFieldSizeY = XSpinnerSizeY // (float)  
0087: PoleShadingFieldPosX = LightShadingDescriptionPosX // (float)
005B: PoleShadingFieldPosX += 7@  // (float)
0087: PoleShadingFieldPosY = PoleShadingDescriptionPosY // (float)
005B: PoleShadingFieldPosY += 8@  // (float)

0087: PoleShadingSpinnerPosX = PoleShadingFieldSizeX // (float)
PoleShadingSpinnerPosX /= 2.0
005B: PoleShadingSpinnerPosX += PoleShadingFieldPosX  // (float)
005B: PoleShadingSpinnerPosX += 8@  // (float)

0087: PoleShadingSpinnerPosY = PoleShadingFieldPosY // (float)

// shadow properties
0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize 65.0 YSize DistanceTextUnderTextValueY store_XSize 5@ store_YSize 6@
0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize 162.0 YSize 0.0 store_XSize 7@ store_YSize 8@
0087: 8@ = XSpinnerSizeX // (float)
8@ /= 2.0

WorldPropertiesTextPosX = 280.0
WorldPropertiesTextPosY = 345.0

// Far clipping (draw distance
0087: FarClippingDescriptionPosX = WorldPropertiesTextPosX // (float)
0087: FarClippingDescriptionPosY = WorldPropertiesTextPosY // (float)    
005B: FarClippingDescriptionPosY += XSpinnerSizeY  // (float)
005B: FarClippingDescriptionPosY += 6@  // (float)

0087: FarClippingFieldSizeX = 5@ // (float) 
0087: FarClippingFieldSizeY = XSpinnerSizeY // (float)  
0087: FarClippingFieldPosX = FarClippingDescriptionPosX // (float)
005B: FarClippingFieldPosX += 7@  // (float)
0087: FarClippingFieldPosY = FarClippingDescriptionPosY // (float)
005B: FarClippingFieldPosY += 8@  // (float)

0087: FarClippingSpinnerPosX = FarClippingFieldSizeX // (float)
FarClippingSpinnerPosX /= 2.0
005B: FarClippingSpinnerPosX += FarClippingFieldPosX  // (float)
005B: FarClippingSpinnerPosX += 8@  // (float)

0087: FarClippingSpinnerPosY = FarClippingFieldPosY // (float)

// fog start
0087: FogStartDescriptionPosX = FarClippingDescriptionPosX // (float)
0087: FogStartDescriptionPosY = FarClippingDescriptionPosY // (float)
005B: FogStartDescriptionPosY += XSpinnerSizeY  // (float)
005B: FogStartDescriptionPosY += 6@  // (float)

0087: FogStartFieldSizeX = 5@ // (float) 
0087: FogStartFieldSizeY = XSpinnerSizeY // (float)  
0087: FogStartFieldPosX = FarClippingDescriptionPosX // (float)
005B: FogStartFieldPosX += 7@  // (float)
0087: FogStartFieldPosY = FogStartDescriptionPosY // (float)
005B: FogStartFieldPosY += 8@  // (float)

0087: FogStartSpinnerPosX = FogStartFieldSizeX // (float)
FogStartSpinnerPosX /= 2.0
005B: FogStartSpinnerPosX += FogStartFieldPosX  // (float)
005B: FogStartSpinnerPosX += 8@  // (float)

0087: FogStartSpinnerPosY = FogStartFieldPosY // (float)

// Light on ground
0087: LightOnGroundDescriptionPosX = FogStartDescriptionPosX // (float)
0087: LightOnGroundDescriptionPosY = FogStartDescriptionPosY // (float)
005B: LightOnGroundDescriptionPosY += XSpinnerSizeY  // (float)
005B: LightOnGroundDescriptionPosY += 6@  // (float)

0087: LightOnGroundFieldSizeX = 5@ // (float) 
0087: LightOnGroundFieldSizeY = XSpinnerSizeY // (float)  
0087: LightOnGroundFieldPosX = FogStartDescriptionPosX // (float)
005B: LightOnGroundFieldPosX += 7@  // (float)
0087: LightOnGroundFieldPosY = LightOnGroundDescriptionPosY // (float)
005B: LightOnGroundFieldPosY += 8@  // (float)

0087: LightOnGroundSpinnerPosX = LightOnGroundFieldSizeX // (float)
LightOnGroundSpinnerPosX /= 2.0
005B: LightOnGroundSpinnerPosX += LightOnGroundFieldPosX  // (float)
005B: LightOnGroundSpinnerPosX += 8@  // (float)

0087: LightOnGroundSpinnerPosY = LightOnGroundFieldPosY // (float)    

// Illumination
0087: IlluminationDescriptionPosX = LightOnGroundDescriptionPosX // (float)
0087: IlluminationDescriptionPosY = LightOnGroundDescriptionPosY // (float)
005B: IlluminationDescriptionPosY += XSpinnerSizeY  // (float)
005B: IlluminationDescriptionPosY += 6@  // (float)

0087: IlluminationFieldSizeX = 5@ // (float) 
0087: IlluminationFieldSizeY = XSpinnerSizeY // (float)  
0087: IlluminationFieldPosX = LightOnGroundDescriptionPosX // (float)
005B: IlluminationFieldPosX += 7@  // (float)
0087: IlluminationFieldPosY = IlluminationDescriptionPosY // (float)
005B: IlluminationFieldPosY += 8@  // (float)

0087: IlluminationSpinnerPosX = IlluminationFieldSizeX // (float)
IlluminationSpinnerPosX /= 2.0
005B: IlluminationSpinnerPosX += IlluminationFieldPosX  // (float)
005B: IlluminationSpinnerPosX += 8@  // (float)

0087: IlluminationSpinnerPosY = IlluminationFieldPosY // (float) 

// Panel
0087: PanelPosX = XSpinnerSizeX // (float)
PanelPosX /= -2.0
005B: PanelPosX += CycleSpinnerPosX  // (float)

PanelPosY = 95.0 
   
0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize 220.0 YSize 0.0 store_XSize 5@ store_YSize 6@
0087: PanelSizeWidth = 5@ // (float)

// Intensity
0087: CurrentCycleIntensityPosX = PanelPosX // (float)
005B: CurrentCycleIntensityPosX += PanelSizeWidth  // (float) 
CurrentCycleIntensityPosX += 25.0
CurrentCycleIntensityPosY = 115.0

0087: NextCycleIntensityPosX = CurrentCycleIntensityPosX // (float)
0087: NextCycleIntensityPosY = CurrentCycleIntensityPosY // (float)
NextCycleIntensityPosY += 10.0
return

:ProcessTimecycMenuOptions
08D7: 5@ = panel PanelHandle active_row 
0A8D: 6@ = read_memory CWeather__CurrentWeatherAddress size 2 virtual_protect 0
00BF: 7@ = current_time_hours, 8@ = current_time_minutes  
             
0AB1: call_scm_func @GetTimeCycleNum 4 hoursAddress _timeCycleStartHoursAddress minutes _timeCycleStartMinutesAddress currentHour 7@ currentMinute 8@ store_cycleNum 7@

006A: 7@ *= WeatherAmountLimit  // (int)
005A: 7@ += 6@  // (int)

0871: init_jump_table PanelPage total_jumps 2 default_jump 0 @ProcessTimecycMenuOptionsPage1 jumps 1 @ProcessTimecycMenuOptionsPage1 2 @ProcessTimecycMenuOptionsPage2 -1 @ProcessTimecycMenuOptionsPage1 -1 @ProcessTimecycMenuOptionsPage1 -1 @ProcessTimecycMenuOptionsPage1 -1 @ProcessTimecycMenuOptionsPage1 -1 @ProcessTimecycMenuOptionsPage1

:ProcessTimecycMenuOptionsPage1
0871: init_jump_table 5@ total_jumps 12 default_jump 0 @Return jumps 0 @ProcessTimecycMenuOption_AMB_staticAmbienceColor 1 @ProcessTimecycMenuOption_Amb_Obj_dynamicAmbienceColor 2 @ProcessTimecycMenuOption_SkyTopColor 3 @ProcessTimecycMenuOption_SkyBottomColor 4 @ProcessTimecycMenuOption_SunCoreColor 5 @ProcessTimecycMenuOption_SunCoronaColor 6 @ProcessTimecycMenuOption_SunProperties
0872: jump_table_jumps 7 @ProcessTimecycMenuOption_ShadowProperties 8 @ProcessTimecycMenuOption_WorldProperties 9 @ProcessTimecycMenuOption_LowCloudsColorAndAlpha 10 @ProcessTimecycMenuOption_BottomCloudsColorAndAlpha 11 @ProcessTimecycMenuOption_NextPage -1 @Return -1 @Return -1 @Return -1 @Return

:ProcessTimecycMenuOptionsPage2
0871: init_jump_table 5@ total_jumps 4 default_jump 0 @Return jumps 0 @ProcessTimecycMenuOption_PreviousPage 1 @ProcessTimecycMenuOption_WaterRGBA 2 @ProcessTimecycMenuOption_ColourCorrect1 3 @ProcessTimecycMenuOption_ColourAdd2 4 @Return 5 @Return 6 @Return
return

:ProcessTimecycMenuOption_AMB_staticAmbienceColor
0A8E: 8@ = CTimeCyc_AMBGreenPool + 7@ // int 
0A8E: 9@ = CTimeCyc_AMBBluePool + 7@ // int
005A: 7@ += CTimeCyc_AMBRedPool  // (int)

0085: TemporaryVariable_1 = 7@ // (int)
0085: TemporaryVariable_2 = 8@ // (int)
0085: TemporaryVariable_3 = 9@ // (int)

0A8D: 7@ = read_memory TemporaryVariable_1 size 1 virtual_protect false
0A8D: 8@ = read_memory TemporaryVariable_2 size 1 virtual_protect false
0A8D: 9@ = read_memory TemporaryVariable_3 size 1 virtual_protect false

0085: HSV_PalleteSelectedColorRed = 7@ // (int)
0085: HSV_PalleteSelectedColorGreen = 8@ // (int)
0085: HSV_PalleteSelectedColorBlue = 9@ // (int)

gosub @PalleteSupport
jump @WriteRGBValuesOnGivenAddresses

:ProcessTimecycMenuOption_Amb_Obj_dynamicAmbienceColor
0A8E: 8@ = CTimeCyc_AMB_OBJGreenPool + 7@ // int 
0A8E: 9@ = CTimeCyc_AMB_OBJBluePool + 7@ // int
005A: 7@ += CTimeCyc_AMB_OBJRedPool  // (int)

0085: TemporaryVariable_1 = 7@ // (int)
0085: TemporaryVariable_2 = 8@ // (int)
0085: TemporaryVariable_3 = 9@ // (int)

0A8D: 7@ = read_memory TemporaryVariable_1 size 1 virtual_protect false
0A8D: 8@ = read_memory TemporaryVariable_2 size 1 virtual_protect false
0A8D: 9@ = read_memory TemporaryVariable_3 size 1 virtual_protect false

0085: HSV_PalleteSelectedColorRed = 7@ // (int)
0085: HSV_PalleteSelectedColorGreen = 8@ // (int)
0085: HSV_PalleteSelectedColorBlue = 9@ // (int)

gosub @PalleteSupport
jump @WriteRGBValuesOnGivenAddresses

:ProcessTimecycMenuOption_SkyTopColor
0A8E: 8@ = CTimeCyc_SkyTopGreenPool + 7@ // int 
0A8E: 9@ = CTimeCyc_SkyTopBluePool + 7@ // int
005A: 7@ += CTimeCyc_SkyTopRedPool  // (int)

0085: TemporaryVariable_1 = 7@ // (int)
0085: TemporaryVariable_2 = 8@ // (int)
0085: TemporaryVariable_3 = 9@ // (int)

0A8D: 7@ = read_memory TemporaryVariable_1 size 1 virtual_protect false
0A8D: 8@ = read_memory TemporaryVariable_2 size 1 virtual_protect false
0A8D: 9@ = read_memory TemporaryVariable_3 size 1 virtual_protect false

0085: HSV_PalleteSelectedColorRed = 7@ // (int)
0085: HSV_PalleteSelectedColorGreen = 8@ // (int)
0085: HSV_PalleteSelectedColorBlue = 9@ // (int)

gosub @PalleteSupport
jump @WriteRGBValuesOnGivenAddresses

:ProcessTimecycMenuOption_SkyBottomColor
0A8E: 8@ = CTimeCyc_SkyBotGreenPool + 7@ // int 
0A8E: 9@ = CTimeCyc_SkyBotBluePool + 7@ // int
005A: 7@ += CTimeCyc_SkyBotRedPool  // (int)

0085: TemporaryVariable_1 = 7@ // (int)
0085: TemporaryVariable_2 = 8@ // (int)
0085: TemporaryVariable_3 = 9@ // (int)

0A8D: 7@ = read_memory TemporaryVariable_1 size 1 virtual_protect false
0A8D: 8@ = read_memory TemporaryVariable_2 size 1 virtual_protect false
0A8D: 9@ = read_memory TemporaryVariable_3 size 1 virtual_protect false

0085: HSV_PalleteSelectedColorRed = 7@ // (int)
0085: HSV_PalleteSelectedColorGreen = 8@ // (int)
0085: HSV_PalleteSelectedColorBlue = 9@ // (int)

gosub @PalleteSupport
jump @WriteRGBValuesOnGivenAddresses

:ProcessTimecycMenuOption_SunCoreColor
0A8E: 8@ = CTimeCyc_SunCoreGreenPool + 7@ // int 
0A8E: 9@ = CTimeCyc_SunCoreBluePool + 7@ // int
005A: 7@ += CTimeCyc_SunCoreRedPool  // (int)

0085: TemporaryVariable_1 = 7@ // (int)
0085: TemporaryVariable_2 = 8@ // (int)
0085: TemporaryVariable_3 = 9@ // (int)

0A8D: 7@ = read_memory TemporaryVariable_1 size 1 virtual_protect false
0A8D: 8@ = read_memory TemporaryVariable_2 size 1 virtual_protect false
0A8D: 9@ = read_memory TemporaryVariable_3 size 1 virtual_protect false

0085: HSV_PalleteSelectedColorRed = 7@ // (int)
0085: HSV_PalleteSelectedColorGreen = 8@ // (int)
0085: HSV_PalleteSelectedColorBlue = 9@ // (int)

gosub @PalleteSupport
jump @WriteRGBValuesOnGivenAddresses

:ProcessTimecycMenuOption_SunCoronaColor
0A8E: 8@ = CTimeCyc_SunCoronaGreenPool + 7@ // int 
0A8E: 9@ = CTimeCyc_SunCoronaBluePool + 7@ // int
005A: 7@ += CTimeCyc_SunCoronaRedPool  // (int)

0085: TemporaryVariable_1 = 7@ // (int)
0085: TemporaryVariable_2 = 8@ // (int)
0085: TemporaryVariable_3 = 9@ // (int)

0A8D: 7@ = read_memory TemporaryVariable_1 size 1 virtual_protect false
0A8D: 8@ = read_memory TemporaryVariable_2 size 1 virtual_protect false
0A8D: 9@ = read_memory TemporaryVariable_3 size 1 virtual_protect false

0085: HSV_PalleteSelectedColorRed = 7@ // (int)
0085: HSV_PalleteSelectedColorGreen = 8@ // (int)
0085: HSV_PalleteSelectedColorBlue = 9@ // (int)

gosub @PalleteSupport
jump @WriteRGBValuesOnGivenAddresses

:ProcessTimecycMenuOption_SunProperties
0A8E: 8@ = CTimeCyc_SprszPool + 7@ // int
0A8E: 9@ = CTimeCyc_SprzbghtPool + 7@ // int
005A: 7@ += CTimeCyc_SunszPool  // (int)

0AB1: call_scm_func @TimecycReadFloatFromMemoryByte 1 address 7@ float_to 10@
0AB1: call_scm_func @TimecycReadFloatFromMemoryByte 1 address 8@ float_to 11@
0AB1: call_scm_func @TimecycReadFloatFromMemoryByte 1 address 9@ float_to 12@

if and
TimerAfterClicking > RegulatorWaitTime
Key.VirtualKeyCode(VK_LBUTTON)  
else_jump @ProcessTimecycMenuOption_SunProperties_draw
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_TOP spinnerPosX SunCoreSizeSpinnerPosX SpinnerY SunCoreSizeSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @ProcessTimecycMenuOption_SunProperties_CoreSizeDecrement
13@ = 0.1
jump @ProcessTimecycMenuOption_SunProperties_CoreSizeChange        

:ProcessTimecycMenuOption_SunProperties_CoreSizeDecrement
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_BOTTOM spinnerPosX SunCoreSizeSpinnerPosX SpinnerY SunCoreSizeSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @ProcessTimecycMenuOption_SunProperties_CoronaSizeIncrement
13@ = -0.1

:ProcessTimecycMenuOption_SunProperties_CoreSizeChange
0AB1: call_scm_func @TimecycWriteMemoryByteFromFloat 5 address 7@ float 10@ add 13@ lowest_value TimecycFloatAsByteLowerLimit highest_value TimecycFloatAsByteUpperLimit store_to 10@
TimerAfterClicking = 0
jump @ProcessTimecycMenuOption_SunProperties_draw

:ProcessTimecycMenuOption_SunProperties_CoronaSizeIncrement
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_TOP spinnerPosX SunCoronaSizeSpinnerPosX SpinnerY SunCoronaSizeSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @ProcessTimecycMenuOption_SunProperties_CoronaSizeDecrement
13@ = 0.1
jump @ProcessTimecycMenuOption_SunProperties_CoronaSizeChange

:ProcessTimecycMenuOption_SunProperties_CoronaSizeDecrement
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_BOTTOM spinnerPosX SunCoronaSizeSpinnerPosX SpinnerY SunCoronaSizeSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @ProcessTimecycMenuOption_SunProperties_SpriteBrightnessIncrement
13@ = -0.1

:ProcessTimecycMenuOption_SunProperties_CoronaSizeChange
0AB1: call_scm_func @TimecycWriteMemoryByteFromFloat 5 address 8@ float 11@ add 13@ lowest_value TimecycFloatAsByteLowerLimit highest_value TimecycFloatAsByteUpperLimit store_to 11@
TimerAfterClicking = 0
jump @ProcessTimecycMenuOption_SunProperties_draw

:ProcessTimecycMenuOption_SunProperties_SpriteBrightnessIncrement
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_TOP spinnerPosX SpriteBrightnessSpinnerPosX SpinnerY SpriteBrightnessSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @ProcessTimecycMenuOption_SunProperties_SpriteBrightnessDecrement
13@ = 0.1
jump @ProcessTimecycMenuOption_SunProperties_SpriteBrightnessChange

:ProcessTimecycMenuOption_SunProperties_SpriteBrightnessDecrement
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_BOTTOM spinnerPosX SpriteBrightnessSpinnerPosX SpinnerY SpriteBrightnessSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @ProcessTimecycMenuOption_SunProperties_draw
13@ = -0.1

:ProcessTimecycMenuOption_SunProperties_SpriteBrightnessChange
0AB1: call_scm_func @TimecycWriteMemoryByteFromFloat 5 address 9@ float 12@ add 13@ lowest_value TimecycFloatAsByteLowerLimit highest_value TimecycFloatAsByteUpperLimit store_to 12@
TimerAfterClicking = 0  

:ProcessTimecycMenuOption_SunProperties_draw
gosub @SetTextProperties
033E: set_draw_text_position SunPropertiesTextPosX SunPropertiesTextPosY GXT 'TOP_SPG'

gosub @SetTextProperties
033E: set_draw_text_position SunCoreSizeDescriptionPosX SunCoreSizeDescriptionPosY GXT 'COP_SZE'
038E: draw_box_position SunCoreSizeFieldPosX SunCoreSizeFieldPosY size SunCoreSizeFieldSizeX SunCoreSizeFieldSizeY RGBA FieldColorRed FieldColorGreen FieldColorBlue MainAlphaLevel
038D: draw_texture TEXTURE_SPINNER position SunCoreSizeSpinnerPosX SunCoreSizeSpinnerPosY size XSpinnerSizeX XSpinnerSizeY RGBA 255 255 255 MainAlphaLevel

gosub @SetTextProperties
033E: set_draw_text_position SunCoronaSizeDescriptionPosX SunCoronaSizeDescriptionPosY GXT 'COP_SZA'
038E: draw_box_position SunCoronaSizeFieldPosX SunCoronaSizeFieldPosY size SunCoronaSizeFieldSizeX SunCoronaSizeFieldSizeY RGBA FieldColorRed FieldColorGreen FieldColorBlue MainAlphaLevel
038D: draw_texture TEXTURE_SPINNER position SunCoronaSizeSpinnerPosX SunCoronaSizeSpinnerPosY size XSpinnerSizeX XSpinnerSizeY RGBA 255 255 255 MainAlphaLevel

gosub @SetTextProperties
033E: set_draw_text_position SpriteBrightnessDescriptionPosX SpriteBrightnessDescriptionPosY GXT 'COP_SPB'
038E: draw_box_position SpriteBrightnessFieldPosX SpriteBrightnessFieldPosY size SpriteBrightnessFieldSizeX SpriteBrightnessFieldSizeY RGBA FieldColorRed FieldColorGreen FieldColorBlue MainAlphaLevel
038D: draw_texture TEXTURE_SPINNER position SpriteBrightnessSpinnerPosX SpriteBrightnessSpinnerPosY size XSpinnerSizeX XSpinnerSizeY RGBA 255 255 255 MainAlphaLevel

gosub @SetTextProperties
03E0: draw_text_behind_textures 0
0AB1: call_scm_func @GetTextureOrBoxTopRightCornerPosition 4 posX SunCoreSizeFieldPosX posY SunCoreSizeFieldPosY sizeX SunCoreSizeFieldSizeX sizeY SunCoreSizeFieldSizeY XPos_to 13@ YPos_to 14@ 
0AB1: call_scm_func @DrawFloatOnScreen 4 number 10@ accuracy 1 position 13@ 14@

gosub @SetTextProperties
03E0: draw_text_behind_textures 0
0AB1: call_scm_func @GetTextureOrBoxTopRightCornerPosition 4 posX SunCoronaSizeFieldPosX posY SunCoronaSizeFieldPosY sizeX SunCoronaSizeFieldSizeX sizeY SunCoronaSizeFieldSizeY XPos_to 13@ YPos_to 14@  
0AB1: call_scm_func @DrawFloatOnScreen 4 number 11@ accuracy 1 position 13@ 14@

gosub @SetTextProperties
03E0: draw_text_behind_textures 0
0AB1: call_scm_func @GetTextureOrBoxTopRightCornerPosition 4 posX SpriteBrightnessFieldPosX posY SpriteBrightnessFieldPosY sizeX SpriteBrightnessFieldSizeX sizeY SpriteBrightnessFieldSizeY XPos_to 13@ YPos_to 14@
0AB1: call_scm_func @DrawFloatOnScreen 4 number 12@ accuracy 1 position 13@ 14@ 
return 

:ProcessTimecycMenuOption_ShadowProperties
0A8E: 8@ = CTimeCyc_LightShdPool + 7@ // int 
0A8E: 9@ = CTimeCyc_PoleShdPool + 7@ // int
005A: 7@ += CTimeCyc_ShdwPool  // (int)

0A8D: 10@ = read_memory 7@ size 1 virtual_protect FALSE
0A8D: 11@ = read_memory 8@ size 1 virtual_protect FALSE
0A8D: 12@ = read_memory 9@ size 1 virtual_protect FALSE   

if and
TimerAfterClicking > RegulatorWaitTime
Key.VirtualKeyCode(VK_LBUTTON)   
else_jump @ProcessTimecycMenuOption_ShadowProperties_draw
:ProcessTimecycMenuOption_ShadowProperties_ShadowIntensityIncrement
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_TOP spinnerPosX ShadowIntensitySpinnerPosX SpinnerY ShadowIntensitySpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @ProcessTimecycMenuOption_ShadowProperties_ShadowIntensityDecrement
10@ += 1
0AB1: call_scm_func @GetIntNumberInRangeNotHigherThanThisValue 2 number 10@ max_value 255 store_to 10@
jump @ProcessTimecycMenuOption_ShadowProperties_ShadowIntensityChange

:ProcessTimecycMenuOption_ShadowProperties_ShadowIntensityDecrement
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_BOTTOM spinnerPosX ShadowIntensitySpinnerPosX SpinnerY ShadowIntensitySpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @ProcessTimecycMenuOption_ShadowProperties_LightShadowIncrement
10@ -= 1
0AB1: call_scm_func @GetIntNumberNotLowerThanZero 1 number 10@ store_to 10@

:ProcessTimecycMenuOption_ShadowProperties_ShadowIntensityChange
0A8C: write_memory 7@ size 1 value 10@ virtual_protect FALSE
TimerAfterClicking = 0
jump @ProcessTimecycMenuOption_ShadowProperties_draw 

:ProcessTimecycMenuOption_ShadowProperties_LightShadowIncrement
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_TOP spinnerPosX LightShadingSpinnerPosX SpinnerY LightShadingSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @ProcessTimecycMenuOption_ShadowProperties_LightShadowDecrement
11@ += 1
0AB1: call_scm_func @GetIntNumberInRangeNotHigherThanThisValue 2 number 11@ max_value 255 store_to 11@
jump @ProcessTimecycMenuOption_ShadowProperties_LightShadowChange

:ProcessTimecycMenuOption_ShadowProperties_LightShadowDecrement
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_BOTTOM spinnerPosX LightShadingSpinnerPosX SpinnerY LightShadingSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @ProcessTimecycMenuOption_ShadowProperties_PoleShadingIncrement
11@ -= 1
0AB1: call_scm_func @GetIntNumberNotLowerThanZero 1 number 11@ store_to 11@

:ProcessTimecycMenuOption_ShadowProperties_LightShadowChange
0A8C: write_memory 8@ size 1 value 11@ virtual_protect FALSE
TimerAfterClicking = 0
jump @ProcessTimecycMenuOption_ShadowProperties_draw

:ProcessTimecycMenuOption_ShadowProperties_PoleShadingIncrement
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_TOP spinnerPosX PoleShadingSpinnerPosX SpinnerY PoleShadingSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @ProcessTimecycMenuOption_ShadowProperties_PoleShadingDecrement
12@ += 1
0AB1: call_scm_func @GetIntNumberInRangeNotHigherThanThisValue 2 number 12@ max_value 255 store_to 12@
jump @ProcessTimecycMenuOption_ShadowProperties_PoleShadingChange

:ProcessTimecycMenuOption_ShadowProperties_PoleShadingDecrement
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_BOTTOM spinnerPosX PoleShadingSpinnerPosX SpinnerY PoleShadingSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @ProcessTimecycMenuOption_ShadowProperties_draw
12@ -= 1
0AB1: call_scm_func @GetIntNumberNotLowerThanZero 1 number 12@ store_to 12@

:ProcessTimecycMenuOption_ShadowProperties_PoleShadingChange
0A8C: write_memory 9@ size 1 value 12@ virtual_protect FALSE
TimerAfterClicking = 0

:ProcessTimecycMenuOption_ShadowProperties_draw 
gosub @SetTextProperties
033E: set_draw_text_position ShadowPropertiesTextPosX ShadowPropertiesTextPosY GXT 'COP_SHP'

gosub @SetTextProperties
033E: set_draw_text_position ShadowIntensityDescriptionPosX ShadowIntensityDescriptionPosY GXT 'COP_SHD'
038E: draw_box_position ShadowIntensityFieldPosX ShadowIntensityFieldPosY size ShadowIntensityFieldSizeX ShadowIntensityFieldSizeY RGBA FieldColorRed FieldColorGreen FieldColorBlue MainAlphaLevel
038D: draw_texture TEXTURE_SPINNER position ShadowIntensitySpinnerPosX ShadowIntensitySpinnerPosY size XSpinnerSizeX XSpinnerSizeY RGBA 255 255 255 MainAlphaLevel

gosub @SetTextProperties
033E: set_draw_text_position LightShadingDescriptionPosX LightShadingDescriptionPosY GXT 'COP_LSH'
038E: draw_box_position LightShadingFieldPosX LightShadingFieldPosY size LightShadingFieldSizeX LightShadingFieldSizeY RGBA FieldColorRed FieldColorGreen FieldColorBlue MainAlphaLevel
038D: draw_texture TEXTURE_SPINNER position LightShadingSpinnerPosX LightShadingSpinnerPosY size XSpinnerSizeX XSpinnerSizeY RGBA 255 255 255 MainAlphaLevel

gosub @SetTextProperties
033E: set_draw_text_position PoleShadingDescriptionPosX PoleShadingDescriptionPosY GXT 'COP_POL'
038E: draw_box_position PoleShadingFieldPosX PoleShadingFieldPosY size PoleShadingFieldSizeX PoleShadingFieldSizeY RGBA FieldColorRed FieldColorGreen FieldColorBlue MainAlphaLevel
038D: draw_texture TEXTURE_SPINNER position PoleShadingSpinnerPosX PoleShadingSpinnerPosY size XSpinnerSizeX XSpinnerSizeY RGBA 255 255 255 MainAlphaLevel

gosub @SetTextProperties
03E0: draw_text_behind_textures 0
0AB1: call_scm_func @GetTextureOrBoxTopRightCornerPosition 4 posX ShadowIntensityFieldPosX posY ShadowIntensityFieldPosY sizeX ShadowIntensityFieldSizeX sizeY ShadowIntensityFieldSizeY XPos_to 13@ YPos_to 14@
045A: draw_text_1number 13@ 14@ GXT 'TCFNUM' number 10@

gosub @SetTextProperties
03E0: draw_text_behind_textures 0
0AB1: call_scm_func @GetTextureOrBoxTopRightCornerPosition 4 posX LightShadingFieldPosX posY LightShadingFieldPosY sizeX LightShadingFieldSizeX sizeY LightShadingFieldSizeY XPos_to 13@ YPos_to 14@
045A: draw_text_1number 13@ 14@ GXT 'TCFNUM' number 11@

gosub @SetTextProperties
03E0: draw_text_behind_textures 0
0AB1: call_scm_func @GetTextureOrBoxTopRightCornerPosition 4 posX PoleShadingFieldPosX posY PoleShadingFieldPosY sizeX PoleShadingFieldSizeX sizeY PoleShadingFieldSizeY XPos_to 13@ YPos_to 14@
045A: draw_text_1number 13@ 14@ GXT 'TCFNUM' number 12@
return

:ProcessTimecycMenuOption_WorldProperties
0A90: 11@ = 7@ * SIZEOF_WORD // int

0A8E: 8@ = CTimeCyc_FogStPool + 11@ // int 
0A8E: 9@ = CTimeCyc_LightOnGroundPool + 7@ // int
0A8E: 10@ = CTimeCyc_IlluminationPool + 7@ // int
0A8E: 7@ = CTimeCyc_FarClpPool + 11@ // int 

               

0AB1: call_scm_func @ReadMemory 4 address 7@ size SIZEOF_WORD signed true virtual_protect false store_results_to 11@
0AB1: call_scm_func @ReadMemory 4 address 8@ size SIZEOF_WORD signed true virtual_protect false store_results_to 12@

0AB1: call_scm_func @TimecycReadFloatFromMemoryByte 1 address 9@ float_to 13@
0AB1: call_scm_func @TimecycReadFloatFromMemoryByte 1 address 10@ float_to 14@      
0AB1: call_scm_func @ReadMemory 4 address 10@ size SIZEOF_BYTE signed false virtual_protect false store_results_to 14@
14@ /= 100

if
Key.VirtualKeyCode(VK_LBUTTON)
else_jump @ProcessTimecycMenuOption_WorldProperties_draw 
if and
TimerAfterClicking > 500
else_jump @ProcessTimecycMenuOption_WorldProperties_LightOnGroundIncrement
if
14@ < 2
else_jump @ProcessTimecycMenuOption_WorldProperties_IlluminationDecrement
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_TOP spinnerPosX IlluminationSpinnerPosX SpinnerY IlluminationSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @ProcessTimecycMenuOption_WorldProperties_IlluminationDecrement 
14@ += 1
jump @ProcessTimecycMenuOption_WorldProperties_IlluminationChange

:ProcessTimecycMenuOption_WorldProperties_IlluminationDecrement
if
14@ > 0
else_jump @ProcessTimecycMenuOption_WorldProperties_LightOnGroundIncrement
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_BOTTOM spinnerPosX IlluminationSpinnerPosX SpinnerY IlluminationSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @ProcessTimecycMenuOption_WorldProperties_LightOnGroundIncrement
14@ -= 1 

:ProcessTimecycMenuOption_WorldProperties_IlluminationChange
0A90: 15@ = 14@ * 100 // int
0A8C: write_memory 10@ size 1 value 15@ virtual_protect false
TimerAfterClicking = 0
jump @ProcessTimecycMenuOption_WorldProperties_draw

:ProcessTimecycMenuOption_WorldProperties_LightOnGroundIncrement
if
TimerAfterClicking > RegulatorWaitTime   
else_jump @ProcessTimecycMenuOption_WorldProperties_FarClippingIncrement
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_TOP spinnerPosX LightOnGroundSpinnerPosX SpinnerY LightOnGroundSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @ProcessTimecycMenuOption_WorldProperties_LightOnGroundDecrement
15@ = 0.1
jump @ProcessTimecycMenuOption_WorldProperties_LightOnGroundChange

:ProcessTimecycMenuOption_WorldProperties_LightOnGroundDecrement
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_BOTTOM spinnerPosX LightOnGroundSpinnerPosX SpinnerY LightOnGroundSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @ProcessTimecycMenuOption_WorldProperties_FarClippingIncrement
15@ = -0.1

:ProcessTimecycMenuOption_WorldProperties_LightOnGroundChange
0AB1: call_scm_func @TimecycWriteMemoryByteFromFloat 5 address 9@ float 13@ add 15@ lowest_value TimecycFloatAsByteLowerLimit highest_value TimecycFloatAsByteUpperLimit store_to 13@
TimerAfterClicking = 0
jump @ProcessTimecycMenuOption_WorldProperties_draw 

:ProcessTimecycMenuOption_WorldProperties_FarClippingIncrement
if
TimerAfterClicking > 3
else_jump @ProcessTimecycMenuOption_WorldProperties_draw 
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_TOP spinnerPosX FarClippingSpinnerPosX SpinnerY FarClippingSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @ProcessTimecycMenuOption_WorldProperties_FarClippingDecrement
11@ += 1
0AB1: call_scm_func @GetIntNumberInRangeNotHigherThanThisValue 2 number 11@ max_value 3000 store_to 11@
jump @ProcessTimecycMenuOption_WorldProperties_FarClippingChange

:ProcessTimecycMenuOption_WorldProperties_FarClippingDecrement
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_BOTTOM spinnerPosX FarClippingSpinnerPosX SpinnerY FarClippingSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @ProcessTimecycMenuOption_WorldProperties_FogStartIncrement
11@ -= 1
0AB1: call_scm_func @GetIntNumberInRangeNotLowerThanThisValue 2 number 11@ max_value -3000 store_to 11@

:ProcessTimecycMenuOption_WorldProperties_FarClippingChange
0A8C: write_memory 7@ size SIZEOF_WORD value 11@ virtual_protect FALSE
TimerAfterClicking = 0
jump @ProcessTimecycMenuOption_WorldProperties_draw

:ProcessTimecycMenuOption_WorldProperties_FogStartIncrement
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_TOP spinnerPosX FogStartSpinnerPosX SpinnerY FogStartSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @ProcessTimecycMenuOption_WorldProperties_FogStartDecrement
12@ += 1
0AB1: call_scm_func @GetIntNumberInRangeNotHigherThanThisValue 2 number 12@ max_value 3000 store_to 12@
jump @ProcessTimecycMenuOption_WorldProperties_FogStartChange

:ProcessTimecycMenuOption_WorldProperties_FogStartDecrement
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_BOTTOM spinnerPosX FogStartSpinnerPosX SpinnerY FogStartSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @ProcessTimecycMenuOption_WorldProperties_draw
12@ -= 1
0AB1: call_scm_func @GetIntNumberInRangeNotLowerThanThisValue 2 number 12@ max_value -3000 store_to 12@

:ProcessTimecycMenuOption_WorldProperties_FogStartChange
0A8C: write_memory 8@ size SIZEOF_WORD value 12@ virtual_protect FALSE
TimerAfterClicking = 0
jump @ProcessTimecycMenuOption_WorldProperties_draw

:ProcessTimecycMenuOption_WorldProperties_draw
gosub @SetTextProperties
033E: set_draw_text_position WorldPropertiesTextPosX WorldPropertiesTextPosY GXT 'COP_WRP'

gosub @SetTextProperties
033E: set_draw_text_position FarClippingDescriptionPosX FarClippingDescriptionPosY GXT 'COP_FCL'
038E: draw_box_position FarClippingFieldPosX FarClippingFieldPosY size FarClippingFieldSizeX FarClippingFieldSizeY RGBA FieldColorRed FieldColorGreen FieldColorBlue MainAlphaLevel
038D: draw_texture TEXTURE_SPINNER position FarClippingSpinnerPosX FarClippingSpinnerPosY size XSpinnerSizeX XSpinnerSizeY RGBA 255 255 255 MainAlphaLevel

gosub @SetTextProperties
033E: set_draw_text_position FogStartDescriptionPosX FogStartDescriptionPosY GXT 'COP_FST'
038E: draw_box_position FogStartFieldPosX FogStartFieldPosY size FogStartFieldSizeX FogStartFieldSizeY RGBA FieldColorRed FieldColorGreen FieldColorBlue MainAlphaLevel
038D: draw_texture TEXTURE_SPINNER position FogStartSpinnerPosX FogStartSpinnerPosY size XSpinnerSizeX XSpinnerSizeY RGBA 255 255 255 MainAlphaLevel

gosub @SetTextProperties
033E: set_draw_text_position LightOnGroundDescriptionPosX LightOnGroundDescriptionPosY GXT 'COP_LOG'
038E: draw_box_position LightOnGroundFieldPosX LightOnGroundFieldPosY size LightOnGroundFieldSizeX LightOnGroundFieldSizeY RGBA FieldColorRed FieldColorGreen FieldColorBlue MainAlphaLevel
038D: draw_texture TEXTURE_SPINNER position LightOnGroundSpinnerPosX LightOnGroundSpinnerPosY size XSpinnerSizeX XSpinnerSizeY RGBA 255 255 255 MainAlphaLevel

gosub @SetTextProperties
033E: set_draw_text_position IlluminationDescriptionPosX IlluminationDescriptionPosY GXT 'COP_ILU'
038E: draw_box_position IlluminationFieldPosX IlluminationFieldPosY size IlluminationFieldSizeX IlluminationFieldSizeY RGBA FieldColorRed FieldColorGreen FieldColorBlue MainAlphaLevel
038D: draw_texture TEXTURE_SPINNER position IlluminationSpinnerPosX IlluminationSpinnerPosY size XSpinnerSizeX XSpinnerSizeY RGBA 255 255 255 MainAlphaLevel

gosub @SetTextProperties
03E0: draw_text_behind_textures 0
0AB1: call_scm_func @GetTextureOrBoxTopRightCornerPosition 4 posX FarClippingFieldPosX posY FarClippingFieldPosY sizeX FarClippingFieldSizeX sizeY FarClippingFieldSizeY XPos_to 15@ YPos_to 16@
045B: draw_text_2numbers 15@ 16@ GXT 'TCFLT' numbers 11@ 0   

gosub @SetTextProperties
03E0: draw_text_behind_textures 0
0AB1: call_scm_func @GetTextureOrBoxTopRightCornerPosition 4 posX FogStartFieldPosX posY FogStartFieldPosY sizeX FogStartFieldSizeX sizeY FogStartFieldSizeY XPos_to 15@ YPos_to 16@
045B: draw_text_2numbers 15@ 16@ GXT 'TCFLT' numbers 12@ 0 

gosub @SetTextProperties
03E0: draw_text_behind_textures 0
0AB1: call_scm_func @GetTextureOrBoxTopRightCornerPosition 4 posX LightOnGroundFieldPosX posY LightOnGroundFieldPosY sizeX LightOnGroundFieldSizeX sizeY LightOnGroundFieldSizeY XPos_to 15@ YPos_to 16@
0AB1: call_scm_func @DrawFloatOnScreen 4 number 13@ accuracy 1 position 15@ 16@

gosub @SetTextProperties
03E0: draw_text_behind_textures 0
0AB1: call_scm_func @GetTextureOrBoxTopRightCornerPosition 4 posX IlluminationFieldPosX posY IlluminationFieldPosY sizeX IlluminationFieldSizeX sizeY IlluminationFieldSizeY XPos_to 15@ YPos_to 16@
045B: draw_text_2numbers 15@ 16@ GXT 'TCFLT' numbers 14@ 0
return

:ProcessTimecycMenuOption_LowCloudsColorAndAlpha
0A8E: 8@ = CTimeCyc_LowCloudsGreenPool + 7@ // int 
0A8E: 9@ = CTimeCyc_LowCloudsBluePool + 7@ // int
0A8E: 10@ = CTimeCyc_LowCloudsAlphaPool + 7@ // int
005A: 7@ += CTimeCyc_LowCloudsRedPool  // (int)

0085: TemporaryVariable_1 = 7@ // (int)
0085: TemporaryVariable_2 = 8@ // (int)
0085: TemporaryVariable_3 = 9@ // (int)
0085: TemporaryVariable_4 = 10@ // (int)

0A8D: 7@ = read_memory TemporaryVariable_1 size 1 virtual_protect false
0A8D: 8@ = read_memory TemporaryVariable_2 size 1 virtual_protect false
0A8D: 9@ = read_memory TemporaryVariable_3 size 1 virtual_protect false
0A8D: 10@ = read_memory TemporaryVariable_4 size 1 virtual_protect false

0085: HSV_PalleteSelectedColorRed = 7@ // (int)
0085: HSV_PalleteSelectedColorGreen = 8@ // (int)
0085: HSV_PalleteSelectedColorBlue = 9@ // (int)
0085: HSV_PalleteSelectedColorAlpha = 10@ // (int)

PalleteIsAlphaEnabled = true
gosub @PalleteSupport
jump @WriteRGBAValuesOnGivenAddresses

:ProcessTimecycMenuOption_BottomCloudsColorAndAlpha
0A8E: 8@ = CTimeCyc_BottomCloudsGreenPool + 7@ // int 
0A8E: 9@ = CTimeCyc_BottomCloudsBluePool + 7@ // int
0A8E: 10@ = CTimeCyc_UpperCloudsAlphaPool + 7@ // int
005A: 7@ += CTimeCyc_BottomCloudsRedPool  // (int)

0085: TemporaryVariable_1 = 7@ // (int)
0085: TemporaryVariable_2 = 8@ // (int)
0085: TemporaryVariable_3 = 9@ // (int)
0085: TemporaryVariable_4 = 10@ // (int)

0A8D: 7@ = read_memory TemporaryVariable_1 size 1 virtual_protect false
0A8D: 8@ = read_memory TemporaryVariable_2 size 1 virtual_protect false
0A8D: 9@ = read_memory TemporaryVariable_3 size 1 virtual_protect false
0A8D: 10@ = read_memory TemporaryVariable_4 size 1 virtual_protect false

0085: HSV_PalleteSelectedColorRed = 7@ // (int)
0085: HSV_PalleteSelectedColorGreen = 8@ // (int)
0085: HSV_PalleteSelectedColorBlue = 9@ // (int)
0085: HSV_PalleteSelectedColorAlpha = 10@ // (int)

PalleteIsAlphaEnabled = true
gosub @PalleteSupport
jump @WriteRGBAValuesOnGivenAddresses

:ProcessTimecycMenuOption_NextPage
08D8: 6@ = panel PanelHandle selected_row
if
003B:   5@ == 6@  // (int)
0AA1: return_if_false
PanelPage = 2
08DA: remove_panel PanelHandle
jump @CreateMenuPanel 

:ProcessTimecycMenuOption_PreviousPage
08D8: 6@ = panel PanelHandle selected_row
if
003B:   5@ == 6@  // (int)
0AA1: return_if_false
PanelPage = 1
08DA: remove_panel PanelHandle
jump @CreateMenuPanel 

:ProcessTimecycMenuOption_WaterRGBA
0A8E: 8@ = CTimeCyc_WaterGreenPool + 7@ // int 
0A8E: 9@ = CTimeCyc_WaterBluePool + 7@ // int
0A8E: 10@ = CTimeCyc_WaterAlphaPool + 7@ // int
005A: 7@ += CTimeCyc_WaterRedPool  // (int)

0085: TemporaryVariable_1 = 7@ // (int)
0085: TemporaryVariable_2 = 8@ // (int)
0085: TemporaryVariable_3 = 9@ // (int)
0085: TemporaryVariable_4 = 10@ // (int)

0A8D: 7@ = read_memory TemporaryVariable_1 size 1 virtual_protect false
0A8D: 8@ = read_memory TemporaryVariable_2 size 1 virtual_protect false
0A8D: 9@ = read_memory TemporaryVariable_3 size 1 virtual_protect false
0A8D: 10@ = read_memory TemporaryVariable_4 size 1 virtual_protect false

0085: HSV_PalleteSelectedColorRed = 7@ // (int)
0085: HSV_PalleteSelectedColorGreen = 8@ // (int)
0085: HSV_PalleteSelectedColorBlue = 9@ // (int)
0085: HSV_PalleteSelectedColorAlpha = 10@ // (int)

PalleteIsAlphaEnabled = true
gosub @PalleteSupport
jump @WriteRGBAValuesOnGivenAddresses

:ProcessTimecycMenuOption_ColourCorrect1
0A8E: 8@ = CTimeCyc_ColourCorrect1GreenPool + 7@ // int 
0A8E: 9@ = CTimeCyc_ColourCorrect1BluePool + 7@ // int
0A8E: 10@ = CTimeCyc_ColourCorrect1AlphaPool + 7@ // int
005A: 7@ += CTimeCyc_ColourCorrect1RedPool  // (int)

0085: TemporaryVariable_1 = 7@ // (int)
0085: TemporaryVariable_2 = 8@ // (int)
0085: TemporaryVariable_3 = 9@ // (int)
0085: TemporaryVariable_4 = 10@ // (int)

0A8D: 7@ = read_memory TemporaryVariable_1 size 1 virtual_protect false
0A8D: 8@ = read_memory TemporaryVariable_2 size 1 virtual_protect false
0A8D: 9@ = read_memory TemporaryVariable_3 size 1 virtual_protect false
0A8D: 10@ = read_memory TemporaryVariable_4 size 1 virtual_protect false

0085: HSV_PalleteSelectedColorRed = 7@ // (int)
0085: HSV_PalleteSelectedColorGreen = 8@ // (int)
0085: HSV_PalleteSelectedColorBlue = 9@ // (int)
0085: HSV_PalleteSelectedColorAlpha = 10@ // (int)

PalleteIsAlphaEnabled = true
gosub @PalleteSupport
jump @WriteRGBAValuesOnGivenAddresses      

:ProcessTimecycMenuOption_ColourAdd2
0A8E: 8@ = CTimeCyc_ColourAdd2GreenPool + 7@ // int 
0A8E: 9@ = CTimeCyc_ColourAdd2BluePool + 7@ // int
0A8E: 10@ = CTimeCyc_ColourAdd2AlphaPool + 7@ // int
005A: 7@ += CTimeCyc_ColourCorrect1RedPool  // (int)

0085: TemporaryVariable_1 = 7@ // (int)
0085: TemporaryVariable_2 = 8@ // (int)
0085: TemporaryVariable_3 = 9@ // (int)
0085: TemporaryVariable_4 = 10@ // (int)

0A8D: 7@ = read_memory TemporaryVariable_1 size 1 virtual_protect false
0A8D: 8@ = read_memory TemporaryVariable_2 size 1 virtual_protect false
0A8D: 9@ = read_memory TemporaryVariable_3 size 1 virtual_protect false
0A8D: 10@ = read_memory TemporaryVariable_4 size 1 virtual_protect false

0085: HSV_PalleteSelectedColorRed = 7@ // (int)
0085: HSV_PalleteSelectedColorGreen = 8@ // (int)
0085: HSV_PalleteSelectedColorBlue = 9@ // (int)
0085: HSV_PalleteSelectedColorAlpha = 10@ // (int)

PalleteIsAlphaEnabled = true
gosub @PalleteSupport

:WriteRGBAValuesOnGivenAddresses
0A8C: write_memory TemporaryVariable_4 size 1 value HSV_PalleteSelectedColorAlpha virtual_protect false
:WriteRGBValuesOnGivenAddresses
0A8C: write_memory TemporaryVariable_1 size 1 value HSV_PalleteSelectedColorRed virtual_protect false
0A8C: write_memory TemporaryVariable_2 size 1 value HSV_PalleteSelectedColorGreen virtual_protect false
0A8C: write_memory TemporaryVariable_3 size 1 value HSV_PalleteSelectedColorBlue virtual_protect false
return

:CreateMenuPanel
wait 250
0871: init_jump_table PanelPage total_jumps 2 default_jump 0 @Return jumps 1 @TimecycOptions_Page1 2 @TimecycOptions_Page2 -1 @Return -1 @Return -1 @Return -1 @Return -1 @Return

:TimecycOptions_Page1
08D4: 5@ = create_panel_with_title 'TCYCOPT' position PanelPosX PanelPosY width PanelSizeWidth columns 1 interactive 1 background 1 alignment 0 
0085: PanelHandle = 5@ // (int)
08DB: set_panel PanelHandle column 0 header 'DUMMY' data {0} 'TOP_AMB' {1} 'TOP_AMD' {2} 'TOP_SKT' {3} 'TOP_SKB' {4} 'TOP_SCE' {5} 'TOP_SCA' {6} 'TOP_SPR' {7} 'TOP_SHP' {8} 'TOP_WRP' {9} 'TOP_LCL' {10} 'TOP_BCL' {11} 'TCNXTPG'
090E: set_panel PanelHandle active_row 1 
return

:TimecycOptions_Page2
0087: 5@ = XSpinnerSizeX // (float)
5@ /= -2.0
005B: 5@ += CycleSpinnerPosX  // (float)

0AB1: call_scm_func @GetXYSizeInScreen4x3ScaleBy640x480 2 XSize PanelXSizeValue YSize 0.0 store_XSize 6@ store_YSize 7@

08D4: 5@ = create_panel_with_title 'TCYCOPT' position 5@ 95.0 width 6@ columns 1 interactive 1 background 1 alignment 0  // Imports
0085: PanelHandle = 5@ // (int)
08DB: set_panel PanelHandle column 0 header 'DUMMY' data {0} 'TCPRVPG' {1} 'TOP_WTR' {2} 'TOP_CO1' {3} 'TOP_CO2' {4} 'DUMMY' {5} 'DUMMY' {6} 'DUMMY' {7} 'DUMMY' {8} 'DUMMY' {9} 'DUMMY' {10} 'DUMMY' {11} 'DUMMY'
090E: set_panel PanelHandle active_row 1 
return

:PalleteSupport
    if or
    803B:  not HSV_PalleteSelectedColorRed == HSV_PalleteSelectedOldColorRed  // (int)
    803B:  not HSV_PalleteSelectedColorGreen == HSV_PalleteSelectedOldColorGreen  // (int)
    803B:  not HSV_PalleteSelectedColorBlue == HSV_PalleteSelectedOldColorBlue  // (int)
    then
    0AB1: call_scm_func @RGBtoHSVConvert 3 red HSV_PalleteSelectedColorRed green HSV_PalleteSelectedColorGreen blue HSV_PalleteSelectedColorBlue hue_to 5@ saturation_to 6@ value_to 7@
    0087: HSV_PalleteSelectedColorHue = 5@ // (float)
    0087: HSV_PalleteSelectedColorSaturation = 6@ // (float)
    0087: HSV_PalleteSelectedColorValue = 7@ // (float)        
    gosub @PalleteSupport_assignNewColorToOldColor   
    end
        
0AB1: call_scm_func @ConvertGTAXYCoordsInScreenBackTo4x3ScaleBy640x480 2 X HSV_PalletePosX Y HSV_PalletePosY store_X 5@ store_Y 6@

0AB1: call_scm_func @ConvertGTAXYCoordsInScreenBackTo4x3ScaleBy640x480 2 X HSV_PalleteSizeX Y HSV_PalleteSizeY store_X 7@ store_Y 8@
7@ /= 2.0
8@ /= 2.0

0AB1: call_scm_func @ConvertGTAXYCoordsInScreenBackTo4x3ScaleBy640x480 2 X HSV_UnderBoxSizeX Y HSV_UnderBoxSizeY store_X 9@ store_Y 10@
9@ /= 2.0
10@ /= 2.0

0AB1: call_scm_func @ConvertGTAXYCoordsInScreenBackTo4x3ScaleBy640x480 2 X CursorPosX Y CursorPosY store_X 11@ store_Y 12@


if
Key.VirtualKeyCode(VK_LBUTTON)
else_jump @PalleteSupport_draw
0509: 13@ = distance_between_XY 5@ 6@ and_XY 11@ 12@     // between XY pallete and XY cursor
if
0035:   10@ >= 13@  // (float)   
else_jump @PalleteSupport_processSpinners  
    if
    0025:   13@ > 7@  // (float)
    then
    0087: 13@ = 7@ // (float)
    end    

0AB1: call_scm_func @getZAngleBetweenPoints 4 from_XY 5@ 6@ and_XY 11@ 12@ store_to 14@      // Hue by angle
14@ -= 90.0
0656: get_angle 14@ absolute_degrees_to 14@
14@ /= 360.0
        
0073: 13@ /= 7@ // (float)

0087: HSV_PalleteSelectedColorHue = 14@ // (float)
0087: HSV_PalleteSelectedColorSaturation = 13@ // (float)
HSV_PalleteSelectedColorValue = 1.0 
    
0AB1: call_scm_func @HSVtoRGBConvert 3 hue 14@ saturation 13@ value 1.0 red_to 13@ green_to 14@ blue_to 15@
    
0085: HSV_PalleteSelectedColorRed = 13@ // (int)
0085: HSV_PalleteSelectedColorGreen = 14@ // (int)
0085: HSV_PalleteSelectedColorBlue = 15@ // (int) 
jump @PalleteSupport_draw

:PalleteSupport_processSpinners
if
TimerAfterClicking < RegulatorWaitTime
0AA0: gosub_if_false @PalleteSupport_processRegulators
     
:PalleteSupport_draw
gosub @SetTextProperties
033E: set_draw_text_position HSV_RGBTextX HSV_RGBTextY GXT 'RGB'

gosub @SetTextProperties
033E: set_draw_text_position HSV_RedDescriptionPosX HSV_RedDescriptionPosY GXT 'RED'

gosub @SetTextProperties
033E: set_draw_text_position HSV_GreenDescriptionPosX HSV_GreenDescriptionPosY GXT 'GREEN'

gosub @SetTextProperties
033E: set_draw_text_position HSV_BlueDescriptionPosX HSV_BlueDescriptionPosY GXT 'BLUE'

gosub @SetTextProperties
033E: set_draw_text_position HSV_HSVTextX HSV_HSVTextY GXT 'HSV'

gosub @SetTextProperties
033E: set_draw_text_position HSV_HueDescriptionPosX HSV_HueDescriptionPosY GXT 'HUE'

gosub @SetTextProperties
033E: set_draw_text_position HSV_SaturationDescriptionPosX HSV_SaturationDescriptionPosY GXT 'SAT'

gosub @SetTextProperties
033E: set_draw_text_position HSV_ValueDescriptionPosX HSV_ValueDescriptionPosY GXT 'VAL'

// 038E: draw_box_position HSV_UnderBoxPosX HSV_UnderBoxPosY size HSV_UnderBoxSizeX HSV_UnderBoxSizeY RGBA 240 240 240 MainAlphaLevel

// RGB fields
038E: draw_box_position HSV_RedFieldPosX HSV_RedFieldPosY size HSV_FieldSizeX HSV_FieldSizeY RGBA FieldColorRed FieldColorGreen FieldColorBlue MainAlphaLevel
038E: draw_box_position HSV_GreenFieldPosX HSV_GreenFieldPosY size HSV_FieldSizeX HSV_FieldSizeY RGBA FieldColorRed FieldColorGreen FieldColorBlue MainAlphaLevel
038E: draw_box_position HSV_BlueFieldPosX HSV_BlueFieldPosY size HSV_FieldSizeX HSV_FieldSizeY RGBA FieldColorRed FieldColorGreen FieldColorBlue MainAlphaLevel

// HSV fields
038E: draw_box_position HSV_HueFieldPosX HSV_HueFieldPosY size HSV_FieldSizeX HSV_FieldSizeY RGBA FieldColorRed FieldColorGreen FieldColorBlue MainAlphaLevel
038E: draw_box_position HSV_SaturationFieldPosX HSV_SaturationFieldPosY size HSV_FieldSizeX HSV_FieldSizeY RGBA FieldColorRed FieldColorGreen FieldColorBlue MainAlphaLevel
038E: draw_box_position HSV_ValueFieldPosX HSV_ValueFieldPosY size HSV_FieldSizeX HSV_FieldSizeY RGBA FieldColorRed FieldColorGreen FieldColorBlue MainAlphaLevel

// RGB spinners
038D: draw_texture TEXTURE_HSV_PALLETE position HSV_PalletePosX HSV_PalletePosY size HSV_PalleteSizeX HSV_PalleteSizeY RGBA 255 255 255 MainAlphaLevel
038D: draw_texture TEXTURE_SPINNER position HSV_RedSpinnerPosX HSV_RedSpinnerPosY size XSpinnerSizeX XSpinnerSizeY RGBA 255 255 255 MainAlphaLevel
038D: draw_texture TEXTURE_SPINNER position HSV_GreenSpinnerPosX HSV_GreenSpinnerPosY size XSpinnerSizeX XSpinnerSizeY RGBA 255 255 255 MainAlphaLevel
038D: draw_texture TEXTURE_SPINNER position HSV_BlueSpinnerPosX HSV_BlueSpinnerPosY size XSpinnerSizeX XSpinnerSizeY RGBA 255 255 255 MainAlphaLevel

// HSV spinners
038D: draw_texture TEXTURE_SPINNER position HSV_HueSpinnerPosX HSV_HueSpinnerPosY size XSpinnerSizeX XSpinnerSizeY RGBA 255 255 255 MainAlphaLevel
038D: draw_texture TEXTURE_SPINNER position HSV_SaturationSpinnerPosX HSV_SaturationSpinnerPosY size XSpinnerSizeX XSpinnerSizeY RGBA 255 255 255 MainAlphaLevel
038D: draw_texture TEXTURE_SPINNER position HSV_ValueSpinnerPosX HSV_ValueSpinnerPosY size XSpinnerSizeX XSpinnerSizeY RGBA 255 255 255 MainAlphaLevel

    if
    PalleteIsAlphaEnabled <> false
    then
    038E: draw_box_position HSV_AlphaFieldPosX HSV_AlphaFieldPosY size HSV_FieldSizeX HSV_FieldSizeY RGBA 255 255 255 MainAlphaLevel
    038D: draw_texture TEXTURE_SPINNER position HSV_AlphaSpinnerPosX HSV_AlphaSpinnerPosY size XSpinnerSizeX XSpinnerSizeY RGBA 255 255 255 MainAlphaLevel
    
    gosub @SetTextProperties
    033E: set_draw_text_position HSV_AlphaDescriptionPosX HSV_AlphaDescriptionPosY GXT 'TCALPHA'
    
    gosub @SetTextProperties
    03E0: draw_text_behind_textures 0
    0AB1: call_scm_func @GetTextureOrBoxTopRightCornerPosition 4 posX HSV_AlphaFieldPosX posY HSV_AlphaFieldPosY sizeX HSV_FieldSizeX sizeY HSV_FieldSizeY XPos_to 12@ YPos_to 13@
    045A: draw_text_1number 12@ 13@ GXT 'TCFNUM' number HSV_PalleteSelectedColorAlpha    
    
    PalleteIsAlphaEnabled = false    
    end

0087: 9@ = HSV_PalleteSelectedColorHue // (float)
0087: 10@ = HSV_PalleteSelectedColorSaturation // (float)

gosub @SetTextProperties
03E0: draw_text_behind_textures 0
0AB1: call_scm_func @GetTextureOrBoxTopRightCornerPosition 4 posX HSV_RedFieldPosX posY HSV_RedFieldPosY sizeX HSV_FieldSizeX sizeY HSV_FieldSizeY XPos_to 12@ YPos_to 13@
045A: draw_text_1number 12@ 13@ GXT 'TCFNUM' number HSV_PalleteSelectedColorRed

gosub @SetTextProperties
03E0: draw_text_behind_textures 0
0AB1: call_scm_func @GetTextureOrBoxTopRightCornerPosition 4 posX HSV_GreenFieldPosX posY HSV_GreenFieldPosY sizeX HSV_FieldSizeX sizeY HSV_FieldSizeY XPos_to 12@ YPos_to 13@
045A: draw_text_1number 12@ 13@ GXT 'TCFNUM' number HSV_PalleteSelectedColorGreen

gosub @SetTextProperties
03E0: draw_text_behind_textures 0
0AB1: call_scm_func @GetTextureOrBoxTopRightCornerPosition 4 posX HSV_BlueFieldPosX posY HSV_BlueFieldPosY sizeX HSV_FieldSizeX sizeY HSV_FieldSizeY XPos_to 12@ YPos_to 13@
045A: draw_text_1number 12@ 13@ GXT 'TCFNUM' number HSV_PalleteSelectedColorBlue

0087: 14@ = HSV_PalleteSelectedColorHue // (float)
0087: 15@ = HSV_PalleteSelectedColorSaturation // (float)
0087: 16@ = HSV_PalleteSelectedColorValue // (float)
14@ *= 360.0
15@ *= 100.0
16@ *= 100.0

0092: 14@ = float 14@ to_integer
0092: 15@ = float 15@ to_integer
0092: 16@ = float 16@ to_integer

gosub @SetTextProperties
03E0: draw_text_behind_textures 0
0AB1: call_scm_func @GetTextureOrBoxTopRightCornerPosition 4 posX HSV_HueFieldPosX posY HSV_HueFieldPosY sizeX HSV_FieldSizeX sizeY HSV_FieldSizeY XPos_to 12@ YPos_to 13@
045A: draw_text_1number 12@ 13@ GXT 'TCDNUM' number 14@

gosub @SetTextProperties
03E0: draw_text_behind_textures 0
0AB1: call_scm_func @GetTextureOrBoxTopRightCornerPosition 4 posX HSV_SaturationFieldPosX posY HSV_SaturationFieldPosY sizeX HSV_FieldSizeX sizeY HSV_FieldSizeY XPos_to 12@ YPos_to 13@
045A: draw_text_1number 12@ 13@ GXT 'TCPNUM' number 15@

gosub @SetTextProperties
03E0: draw_text_behind_textures 0
0AB1: call_scm_func @GetTextureOrBoxTopRightCornerPosition 4 posX HSV_ValueFieldPosX posY HSV_ValueFieldPosY sizeX HSV_FieldSizeX sizeY HSV_FieldSizeY XPos_to 12@ YPos_to 13@
045A: draw_text_1number 12@ 13@ GXT 'TCPNUM' number 16@

0087: 11@ = 10@ // (float)      // Y radius in points
006B: 11@ *= 8@  // (float)

006B: 10@ *= 7@  // (float)     // X radius in points

9@ *= 360.0    
0656: get_angle 9@ absolute_degrees_to 9@                     
    
02F6: 12@ = sine 9@ // (float)  // Y
02F7: 9@ = cosine 9@ // (float) // X
       
006B: 9@ *= 10@  // (float)     // X radius
006B: 12@ *= 11@  // (float)     // Y radius
    
005B: 5@ += 9@  // (float)
005B: 6@ += 12@  // (float)
        
0AB1: call_scm_func @GetXYPosInScreen4x3ScaleBy640x480 2 XPos 5@ YPos 6@ store_XPos 5@ store_YPos 6@
038D: draw_texture TEXTURE_NEEDLE position 5@ 6@ size HSV_NeedleSizeX HSV_NeedleSizeY RGBA 255 255 255 MainAlphaLevel  

038E: draw_box_position HSV_ColorBoxPosX HSV_ColorBoxPosY size HSV_ColorBoxBorderSizeX HSV_ColorBoxBorderSizeY RGBA 0 0 0 MainAlphaLevel          
038E: draw_box_position HSV_ColorBoxPosX HSV_ColorBoxPosY size HSV_ColorBoxSizeX HSV_ColorBoxSizeY RGBA HSV_PalleteSelectedColorRed HSV_PalleteSelectedColorGreen HSV_PalleteSelectedColorBlue MainAlphaLevel
return

:PalleteSupport_processRegulators
{
Don`t change:
9@, 10@, 11@ - HSV
}
:PalleteSupport_ColorIncrementAlpha
if 
PalleteIsAlphaEnabled <> false
else_jump @PalleteSupport_ColorIncrementRedColor
if
HSV_PalleteSelectedColorAlpha < 255                                   
else_jump @PalleteSupport_ColorDecrementColorAlpha
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_TOP spinnerPosX HSV_AlphaSpinnerPosX SpinnerY HSV_AlphaSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @PalleteSupport_ColorDecrementColorAlpha
HSV_PalleteSelectedColorAlpha += 1      
TimerAfterClicking = 0
return

:PalleteSupport_ColorDecrementColorAlpha
if
HSV_PalleteSelectedColorAlpha > 0 
else_jump @PalleteSupport_ColorIncrementRedColor
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_BOTTOM spinnerPosX HSV_AlphaSpinnerPosX SpinnerY HSV_AlphaSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @PalleteSupport_ColorIncrementRedColor
HSV_PalleteSelectedColorAlpha -= 1         
TimerAfterClicking = 0
return

:PalleteSupport_ColorIncrementRedColor
if 
HSV_PalleteSelectedColorRed < 255
else_jump @PalleteSupport_ColorDecrementRedColor
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_TOP spinnerPosX HSV_RedSpinnerPosX SpinnerY HSV_RedSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @PalleteSupport_ColorDecrementRedColor
HSV_PalleteSelectedColorRed += 1 
TimerAfterClicking = 0
return

:PalleteSupport_ColorDecrementRedColor
if
HSV_PalleteSelectedColorRed > 0 
else_jump @PalleteSupport_ColorIncrementGreenColor
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_BOTTOM spinnerPosX HSV_RedSpinnerPosX SpinnerY HSV_RedSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @PalleteSupport_ColorIncrementGreenColor
HSV_PalleteSelectedColorRed -= 1   
TimerAfterClicking = 0
return

:PalleteSupport_ColorIncrementGreenColor
if
HSV_PalleteSelectedColorGreen < 255
else_jump @PalleteSupport_ColorDecrementGreenColor
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_TOP spinnerPosX HSV_GreenSpinnerPosX SpinnerY HSV_GreenSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @PalleteSupport_ColorDecrementGreenColor
HSV_PalleteSelectedColorGreen += 1
TimerAfterClicking = 0
return

:PalleteSupport_ColorDecrementGreenColor
if
HSV_PalleteSelectedColorGreen > 0 
else_jump @PalleteSupport_ColorIncrementBlueColor
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_BOTTOM spinnerPosX HSV_GreenSpinnerPosX SpinnerY HSV_GreenSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @PalleteSupport_ColorIncrementBlueColor
HSV_PalleteSelectedColorGreen -= 1     
TimerAfterClicking = 0
return

:PalleteSupport_ColorIncrementBlueColor
if
HSV_PalleteSelectedColorBlue < 255
else_jump @PalleteSupport_ColorDecrementBlueColor
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_TOP spinnerPosX HSV_BlueSpinnerPosX SpinnerY HSV_BlueSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @PalleteSupport_ColorDecrementBlueColor
HSV_PalleteSelectedColorBlue += 1
TimerAfterClicking = 0
return

:PalleteSupport_ColorDecrementBlueColor
if
HSV_PalleteSelectedColorBlue > 0 
else_jump @PalleteSupport_ColorIncrementHue
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_BOTTOM spinnerPosX HSV_BlueSpinnerPosX SpinnerY HSV_BlueSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @PalleteSupport_ColorIncrementHue
HSV_PalleteSelectedColorBlue -= 1

TimerAfterClicking = 0
return

:PalleteSupport_ColorIncrementHue
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_TOP spinnerPosX HSV_HueSpinnerPosX SpinnerY HSV_HueSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @PalleteSupport_ColorDecrementHue
HSV_PalleteSelectedColorHue += 0.00277777778    // 1/360
    if
    HSV_PalleteSelectedColorHue > 1.0
    then
    HSV_PalleteSelectedColorHue = 1.0
    end
jump @PalleteSupport_processRegulators_saveNewColorByHSV

:PalleteSupport_ColorDecrementHue
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_BOTTOM spinnerPosX HSV_HueSpinnerPosX SpinnerY HSV_HueSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @PalleteSupport_ColorIncrementSaturation
HSV_PalleteSelectedColorHue -= 0.00277777778    // 1/360
    if
    HSV_PalleteSelectedColorHue < 0.0
    then
    HSV_PalleteSelectedColorHue = 0.0
    end
jump @PalleteSupport_processRegulators_saveNewColorByHSV

:PalleteSupport_ColorIncrementSaturation
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_TOP spinnerPosX HSV_SaturationSpinnerPosX SpinnerY HSV_SaturationSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @PalleteSupport_ColorDecrementSaturation
HSV_PalleteSelectedColorSaturation += 0.01    // 1/100
    if
    HSV_PalleteSelectedColorSaturation > 1.0
    then
    HSV_PalleteSelectedColorSaturation = 1.0
    end
jump @PalleteSupport_processRegulators_saveNewColorByHSV

:PalleteSupport_ColorDecrementSaturation
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_BOTTOM spinnerPosX HSV_SaturationSpinnerPosX SpinnerY HSV_SaturationSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @PalleteSupport_ColorIncrementValue
HSV_PalleteSelectedColorSaturation -= 0.01    // 1/100
    if
    HSV_PalleteSelectedColorSaturation < 0.0
    then
    HSV_PalleteSelectedColorSaturation = 0.0
    end
jump @PalleteSupport_processRegulators_saveNewColorByHSV

:PalleteSupport_ColorIncrementValue
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_TOP spinnerPosX HSV_ValueSpinnerPosX SpinnerY HSV_ValueSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @PalleteSupport_ColorDecrementValue
HSV_PalleteSelectedColorValue += 0.01    // 1/100
    if
    HSV_PalleteSelectedColorValue > 1.0
    then
    HSV_PalleteSelectedColorValue = 1.0
    end
jump @PalleteSupport_processRegulators_saveNewColorByHSV

:PalleteSupport_ColorDecrementValue
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_BOTTOM spinnerPosX HSV_ValueSpinnerPosX SpinnerY HSV_ValueSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
0AA1: return_if_false
HSV_PalleteSelectedColorValue -= 0.01    // 1/100
    if
    HSV_PalleteSelectedColorValue < 0.0
    then
    HSV_PalleteSelectedColorValue = 0.0
    end

:PalleteSupport_processRegulators_saveNewColorByHSV
TimerAfterClicking = 0                                                                                                  
0AB1: call_scm_func @HSVtoRGBConvert 3 hue HSV_PalleteSelectedColorHue saturation HSV_PalleteSelectedColorSaturation value HSV_PalleteSelectedColorValue red_to 12@ green_to 13@ blue_to 14@
0085: HSV_PalleteSelectedColorRed = 12@ // (int)
0085: HSV_PalleteSelectedColorGreen = 13@ // (int)
0085: HSV_PalleteSelectedColorBlue = 14@ // (int)

:PalleteSupport_assignNewColorToOldColor
0085: HSV_PalleteSelectedOldColorRed = HSV_PalleteSelectedColorRed // (int)
0085: HSV_PalleteSelectedOldColorGreen = HSV_PalleteSelectedColorGreen // (int)
0085: HSV_PalleteSelectedOldColorBlue = HSV_PalleteSelectedColorBlue // (int)
return

:ActionAlways
    if
    ComuniqueTextTimer > 0 
    then
    0342: set_text_draw_centered 1
    03E0: draw_text_behind_textures 1
    0344: set_text_draw_linewidth 400.0 for_centered_text
    033F: set_text_draw_letter_size ComuniqueFontSizeX ComuniqueFontSizeY
    03E3: set_texture_to_be_drawn_antialiased 0
    060D: draw_text_shadow 1 color_RGBA 0 0 0 MainAlphaLevel
    
    033E: set_draw_text_position 422.0 233.0 GXT GXTcomuniqueKey
    end 

gosub @PlayerLock

038D: draw_texture TEXTURE_SAVE position SaveButtonPosX SaveButtonPosY size SaveButtonSizeX SaveButtonSizeY RGBA 255 255 255 MainAlphaLevel
038D: draw_texture TEXTURE_RELOAD position ReloadButtonPosX ReloadButtonPosY size ReloadButtonSizeX ReloadButtonSizeY RGBA 255 255 255 MainAlphaLevel

gosub @SetTextProperties
03E0: draw_text_behind_textures 0
033E: set_draw_text_position SaveTextPosX SaveTextPosY GXT 'TCSAVE'

5@ = 10.0
gosub @SetTextProperties
033E: set_draw_text_position 15.0 5@ GXT 'TMC'
5@ += 10.0

gosub @SetTextProperties
    if
    DoesIniFileWork <> false
    then
    033E: set_draw_text_position 15.0 5@ GXT 'TCINITR'
    else
    033E: set_draw_text_position 15.0 5@ GXT 'TCINIFL'
    end

038D: draw_texture TEXTURE_SPINNER position WeatherSpinnerPosX WeatherSpinnerPosY size XSpinnerSizeX XSpinnerSizeY RGBA 255 255 255 MainAlphaLevel
038E: draw_box_position WeatherNameFieldPosX WeatherNameFieldPosY size WeatherNameFieldSizeX WeatherNameFieldSizeY RGBA FieldColorRed FieldColorGreen FieldColorBlue MainAlphaLevel

038D: draw_texture TEXTURE_SPINNER position CycleSpinnerPosX CycleSpinnerPosY size XSpinnerSizeX XSpinnerSizeY RGBA 255 255 255 MainAlphaLevel
038E: draw_box_position CycleNameFieldPosX CycleNameFieldPosY size CycleNameFieldSizeX CycleNameFieldSizeY RGBA FieldColorRed FieldColorGreen FieldColorBlue MainAlphaLevel

074B: draw_texture TEXTURE_SPINNER position HourSpinnerPosX HourSpinnerPosY scale XSpinnerSizeX XSpinnerSizeY angle 90.0 color_RGBA FieldColorRed FieldColorGreen FieldColorBlue MainAlphaLevel
074B: draw_texture TEXTURE_SPINNER position MinuteSpinnerPosX MinuteSpinnerPosY scale XSpinnerSizeX XSpinnerSizeY angle 90.0 color_RGBA FieldColorRed FieldColorGreen FieldColorBlue MainAlphaLevel

gosub @SetTextProperties
03E0: draw_text_behind_textures 0
//033F: set_text_draw_letter_size 0.4 1.660

0A9F: 5@ = current_thread_pointer
0AB1: call_scm_func @getLocalVarOffset 2 thread 5@ var 5 store_to 5@      
0A8F: 7@ = 31@ - @GXTKeyPattern_WeatherName // int
0A8D: 8@ = read_memory CWeather__CurrentWeatherAddress size 2 virtual_protect false
           
0AA5: call _sprintf Sprintf num_params 3 pop 3 |parameters| WeatherID 8@ format 7@ return_space 5@ 

033E: set_draw_text_position WeatherNameTextPosX WeatherNameTextPosY GXT 5@s

// Cycle
00BF: 7@ = current_time_hours, 8@ = current_time_minutes
0AB1: call_scm_func @GetTimeCycleNum 4 hoursAddress _timeCycleStartHoursAddress minutes _timeCycleStartMinutesAddress currentHour 7@ currentMinute 8@ store_cycleNum 9@

0A9F: 5@ = current_thread_pointer
0AB1: call_scm_func @getLocalVarOffset 2 thread 5@ var 5 store_to 5@
0A8F: 6@ = SCRIPT_POINTER - @GXTKeyPattern_TimeCycle // int

0AA5: call Sprintf num_params 3 pop 3 |parameters| CycleID 9@ format 6@ return_space 5@

gosub @SetTextProperties
03E0: draw_text_behind_textures 0
033E: set_draw_text_position CycleNameTextPosX CycleNameTextPosY GXT 5@s 

0AB1: call_scm_func @GetStartTimeOfCycle 3 hoursAddress _timeCycleStartHoursAddress minutes _timeCycleStartMinutesAddress cycle 9@ store_hour 11@ store_minutes 12@
0A8E: 10@ = 9@ + 1 // int   
0AB1: call_scm_func @GetIntRemainder 2 divisor 10@ % divisor 8 store_remainder_to 10@
0AB1: call_scm_func @GetStartTimeOfCycle 3 hoursAddress _timeCycleStartHoursAddress minutes _timeCycleStartMinutesAddress cycle 10@ store_hour 13@ store_minutes 14@

11@ *= 60    // start of current cycle
005A: 11@ += 12@  // (int)
13@ *= 60    // start of next cycle
005A: 13@ += 14@  // (int)
7@ *= 60    // current time
005A: 7@ += 8@  // (int)

    if
    001D:   11@ > 13@  // (int)
    then
    13@ += 1440
    end  

0A8F: 12@ = 13@ - 7@ // int  
12@ *= 100

0062: 13@ -= 11@  // (int)
0072: 12@ /= 13@ // (int) 

0A8F: 14@ = 100 - 12@ // int 

0A9F: 5@ = current_thread_pointer
0AB1: call_scm_func @getLocalVarOffset 2 thread 5@ var 5 store_to 5@
0A8F: 6@ = SCRIPT_POINTER - @GXTKeyPattern_CurrentCycleIntensity // int

0AA5: call Sprintf num_params 3 pop 3 |parameters| CycleID 9@ format 6@ return_space 5@

gosub @SetTextProperties
03E0: draw_text_behind_textures 0
045A: draw_text_1number CurrentCycleIntensityPosX CurrentCycleIntensityPosY GXT 5@s number 12@ 

0A9F: 5@ = current_thread_pointer
0AB1: call_scm_func @getLocalVarOffset 2 thread 5@ var 5 store_to 5@
0A8F: 6@ = SCRIPT_POINTER - @GXTKeyPattern_NextCycleIntensity // int

0AA5: call Sprintf num_params 3 pop 3 |parameters| CycleID 10@ format 6@ return_space 5@

gosub @SetTextProperties
03E0: draw_text_behind_textures 0
045A: draw_text_1number NextCycleIntensityPosX NextCycleIntensityPosY GXT 5@s number 14@  

    if
    EnablePossibilityToStopTime <> false
    then
    0A8F: 5@ = SCRIPT_POINTER - @IsTimeStopped // int
    0A8D: 6@ = read_memory 5@ size 1 virtual_protect false
        
        if 
        6@ <> false
        then
        038D: draw_texture TEXTURE_TIME_DISABLED position TimeStateButtonPosX TimeStateButtonPosY size TimeStateButtonSizeX TimeStateButtonSizeY RGBA 255 255 255 MainAlphaLevel
        else
        038D: draw_texture TEXTURE_TIME_ENABLED position TimeStateButtonPosX TimeStateButtonPosY size TimeStateButtonSizeX TimeStateButtonSizeY RGBA 255 255 255 MainAlphaLevel
        end
    end

if and
Key.VirtualKeyCode(VK_LBUTTON)
0AA1: return_if_false

:ActionAlways_isTimeChangeButtonPressed
if
TimerAfterClicking > 400
else_jump @ActionAlways_isHourDecrementSpinnerPressed
if
EnablePossibilityToStopTime <> false
else_jump @ActionAlways_isReloadButtonPressed
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_ALL spinnerPosX TimeStateButtonPosX SpinnerY TimeStateButtonPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX TimeStateButtonSizeX spinnerSizeY TimeStateButtonSizeY
else_jump @ActionAlways_isReloadButtonPressed
0AB1: call_scm_func @SwitchTrueOrFalse 1 number 6@ store_to 6@
0A8C: write_memory 5@ size 1 value 6@ virtual_protect false
TimerAfterClicking = 0
return

:ActionAlways_isReloadButtonPressed
0AB1: call_scm_func @ConvertGTAXYCoordsInScreenBackTo4x3ScaleBy640x480 2 X CursorPosX Y CursorPosY store_X 5@ store_Y 6@
0AB1: call_scm_func @ConvertGTAXYCoordsInScreenBackTo4x3ScaleBy640x480 2 X ReloadButtonPosX Y ReloadButtonPosY store_X 7@ store_Y 8@
0AB1: call_scm_func @ConvertGTAXYCoordsInScreenBackTo4x3ScaleBy640x480 2 X ReloadButtonSizeX Y ReloadButtonSizeY store_X 9@ store_Y 10@
9@ /= 2.0
0509: 5@ = distance_between_XY 5@ 6@ and_XY 7@ 8@

if
0035:   9@ >= 5@  // (float)
else_jump @ActionAlways_isWriteTimecycDatButtonPressed
0AA5: call CTimeCycle_Initialise num_params 0 pop 0
ComuniqueTextTimer = 3000
GXTcomuniqueKey = 'TCRELO'
TimerAfterClicking = 0
return

:ActionAlways_isWriteTimecycDatButtonPressed
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_ALL spinnerPosX SaveButtonPosX SpinnerY SaveButtonPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX SaveButtonSizeX spinnerSizeY SaveButtonSizeY
else_jump @ActionAlways_isWeatherIncrementSpinnerPressed
0AB1: call_scm_func @WriteNewTimecycDat 4 CTimecycArrayIndex CTimecyc ScriptPointer SCRIPT_POINTER number_of_weathers WeatherAmountLimit write_illumination? WriteIllumination
GXTcomuniqueKey = 'TCSUCC'
ComuniqueTextTimer = 3000
TimerAfterClicking = 0
return

:ActionAlways_isWeatherIncrementSpinnerPressed
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_TOP spinnerPosX WeatherSpinnerPosX SpinnerY WeatherSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @ActionAlways_isWeatherDecrementSpinnerPressed

// Increment weather
6@ = 1
TimerAfterClicking = 0
jump @ActionAlways_adjustWeather

:ActionAlways_isWeatherDecrementSpinnerPressed
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_BOTTOM spinnerPosX WeatherSpinnerPosX SpinnerY WeatherSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XspinnerSizeX spinnerSizeY XspinnerSizeY
else_jump @ActionAlways_isCycleIncrementSpinnerPressed

// Decrement weather 
6@ = -1
TimerAfterClicking = 0
:ActionAlways_adjustWeather
0A8D: 5@ = read_memory CWeather__CurrentWeatherAddress size 2 virtual_protect 0
005A: 5@ += 6@  // (int)

0AB1: call_scm_func @GetIntRemainder 2 divisor 5@ % divisor WeatherAmountLimit store_remainder_to 5@
01B6: set_weather 5@
return

:Return
return

:ActionAlways_isCycleIncrementSpinnerPressed 
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_TOP spinnerPosX CycleSpinnerPosX SpinnerY CycleSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XSpinnerSizeX spinnerSizeY XSpinnerSizeY
else_jump @ActionAlways_isCycleDecrementSpinnerPressed
7@ = 1
jump @ActionAlways_adjustCycle

:ActionAlways_isCycleDecrementSpinnerPressed
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_BOTTOM spinnerPosX CycleSpinnerPosX SpinnerY CycleSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XSpinnerSizeX spinnerSizeY XSpinnerSizeY
else_jump @ActionAlways_isHourDecrementSpinnerPressed
7@ = -1
:ActionAlways_adjustCycle
TimerAfterClicking = 0
00BF: 5@ = current_time_hours, 6@ = current_time_minutes
0AB1: call_scm_func @GetTimeCycleNum 4 hoursAddress _timeCycleStartHoursAddress minutes _timeCycleStartMinutesAddress currentHour 5@ currentMinute 6@ store_cycleNum 5@
005A: 5@ += 7@  // (int)
0AB1: call_scm_func @GetIntRemainder 2 divisor 5@ % divisor 8 store_remainder_to 5@
0AB1: call_scm_func @GetStartTimeOfCycle 3 hoursAddress _timeCycleStartHoursAddress minutes _timeCycleStartMinutesAddress cycle 5@ store_hour 5@ store_minutes 6@ 
00C0: set_current_time hour 5@ minutes 6@
return

:ActionAlways_isHourDecrementSpinnerPressed
if
TimerAfterClicking > 100
0AA1: return_if_false
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_LEFT spinnerPosX HourSpinnerPosX SpinnerY HourSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XSpinnerSizeY spinnerSizeY XSpinnerSizeX
else_jump @ActionAlways_isHourIncrementSpinnerPressed
7@ = -1
jump @ActionAlways_adjustHour 

:ActionAlways_isHourIncrementSpinnerPressed
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_RIGHT spinnerPosX HourSpinnerPosX SpinnerY HourSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XSpinnerSizeY spinnerSizeY XSpinnerSizeX
else_jump @ActionAlways_isMinutesDecrementSpinnerPressed
7@ = 1
:ActionAlways_adjustHour
00BF: 5@ = current_time_hours, 6@ = current_time_minutes
005A: 5@ += 7@  // (int)
0AB1: call_scm_func @GetIntRemainder 2 divisor 5@ % divisor 24 store_remainder_to 5@
00C0: set_current_time 5@ 6@
TimerAfterClicking = 0
return

:ActionAlways_isMinutesDecrementSpinnerPressed
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_LEFT spinnerPosX MinuteSpinnerPosX SpinnerY MinuteSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XSpinnerSizeY spinnerSizeY XSpinnerSizeX
else_jump @ActionAlways_isMinutesIncrementSpinnerPressed
7@ = -1
jump @ActionAlways_adjustMinutes

:ActionAlways_isMinutesIncrementSpinnerPressed
if
0AB1: call_scm_func @SpinnerEvent_IsPressedSpecifiedPart 7 mode SPINNER_RIGHT spinnerPosX MinuteSpinnerPosX SpinnerY MinuteSpinnerPosY ToPosX CursorPosX ToPosY CursorPosY spinnerSizeX XSpinnerSizeY spinnerSizeY XSpinnerSizeX
0AA1: return_if_false
7@ = 1
:ActionAlways_adjustMinutes
00BF: 5@ = current_time_hours, 6@ = current_time_minutes
005A: 6@ += 7@  // (int)
0AB1: call_scm_func @GetIntRemainder 2 divisor 6@ % divisor 60 store_remainder_to 6@
00C0: set_current_time 5@ 6@
TimerAfterClicking = 0
return

:SetTextProperties
03E0: draw_text_behind_textures 1
033F: set_text_draw_letter_size FontSizeX FontSizeY
0343: set_text_draw_linewidth 640.0
03E3: set_texture_to_be_drawn_antialiased 0              
060D: draw_text_shadow 1 color_RGBA 0 0 0 MainAlphaLevel
return  

:GetTextureOrBoxTopRightCornerPosition
// Example: 0AB1: call_scm_func @GetTextureOrBoxTopRightCornerPosition 4 posX 320.0 posY 224.0 sizeX 20.0 sizeY 20.0 XPos_to 12@ YPos_to 13@
2@ /= 2.0
3@ /= 2.0
0063: 0@ -= 2@  // (float)
0063: 1@ -= 3@  // (float)
0AB2: ret 2 XPos 0@ YPos 1@

:MouseSupport 
if
LockCursor == false
else_jump @MouseSupportDraw  
0A4A: store_joystick_X_offset_to 5@ Y_offset_to 6@
0A8D: 7@ = read_memory _mouseInvertXAddress size 1 virtual_protect false
0A8D: 8@ = read_memory _mouseInvertYAddress size 1 virtual_protect false
    if
    7@ <> false
    then
    5@ *= -1.0
    end
    
    if
    8@ <> false
    then 
    6@ *= -1.0
    end

0A8D: 7@ = read_memory MouseSensitivityAddress size 4 virtual_protect false
006B: 5@ *= 7@  // (float)
006B: 6@ *= 7@  // (float)  
5@ *= 200.0
6@ *= 200.0

005B: CursorPosX += 5@  // (float)
005B: CursorPosY += 6@  // (float)

if
    CursorPosX < 0.0
else_jump @MouseSupport_IsXPositionAbove640
CursorPosX = 0.0
jump @MouseSupport_IsYPositionBelow0

:MouseSupport_IsXPositionAbove640
if
    CursorPosX > 639.0
else_jump @MouseSupport_IsYPositionBelow0
CursorPosX = 639.0

:MouseSupport_IsYPositionBelow0
if
   CursorPosY < 0.0
else_jump @MouseSupport_IsYPositionAbove448
CursorPosY = 0.0
jump @MouseSupportDraw

:MouseSupport_IsYPositionAbove448
if
   CursorPosY > 447.0
else_jump @MouseSupportDraw
CursorPosY = 447.0    

:MouseSupportDraw
0087: 5@ = CursorPosX // (float)
0087: 7@ = CursorSizeX // (float)

7@ /= 2.0
005B: 5@ += 7@  // (float)
    
0087: 6@ = CursorPosY // (float)
0087: 8@ = CursorSizeY // (float)

8@ /= 2.0
005B: 6@ += 8@  // (float)

038D: draw_texture TEXTURE_CURSOR position 5@ 6@ size CursorSizeX CursorSizeY RGBA 255 255 255 MainAlphaLevel
return

:PlayerLock
Actor.SetImmunities($PLAYER_ACTOR, 1, 1, 1, 1, 1)
Player.CanMove($PLAYER_CHAR) = False
// 0AD1: show_formatted_text_highpriority "address: %X state: %d" time 2000 5@ 6@
return

:PlayerUnlock 
Player.CanMove($PLAYER_CHAR) = True

Actor.SetImmunities($PLAYER_ACTOR, 0, 0, 0, 0, 0)
return

:GetTimeCycleNum
{
0@ - address of _timeCycleStartHours
1@ - address of _timeCycleStartMinutes
2@ - current hour
3@ - current minute
Example: 0AB1: call_scm_func @GetTimeCycleNum 4 hoursAddress _timeCycleStartHoursAddress minutes _timeCycleStartMinutesAddress currentHour 7@ currentMinute 8@ store_cycleNum 7@
}
    if
    2@ < 5
    then
    0AB2: ret 1 0
    else
        if and
        2@ >= 5
        2@ <= 7
        then
        2@ -= 4
        else
            if and
            2@ > 7
            2@ < 12
            then
            0AB2: ret 1 3
            else
                if and
                2@ >= 12
                2@ < 19
                then 
                0AB2: ret 1 4
                else
                    if and
                    2@ >= 19
                    2@ <= 20
                    then
                    2@ -= 14
                    else
                        if and
                        2@ > 20
                        2@ < 22
                        then
                        0AB2: ret 1 6
                        else
                        0AB2: ret 1 7
                        end
                    end
                 end    
            end
        end        
    end 
0AB2: ret 1 2@             
{
2@ *= 60
005A: 2@ += 3@  // (int)

:GetTimeCycleNum_Loop 
if
001B:   8 > 4@
else_jump @GetTimeCycleNumReturn
0A8E: 5@ = 0@ + 4@ // int
0A8E: 6@ = 1@ + 4@ // int
0A8D: 5@ = read_memory 5@ size 1 virtual_protect false  // hour
0A8D: 6@ = read_memory 6@ size 1 virtual_protect false  // minutes
0AB1: call_scm_func @GetIntRemainder 2 divisor 5@ % divisor 24 store_remainder_to 5@ 
0AB1: call_scm_func @GetIntRemainder 2 divisor 6@ % divisor 60 store_remainder_to 6@ 

0A8E: 7@ = 4@ + 1 // int
0AB1: call_scm_func @GetIntRemainder 2 divisor 7@ % divisor 8 store_remainder_to 7@ 

0A8E: 8@ = 1@ + 7@ // int
     
005A: 7@ += 0@  // (int)


0A8D: 12@ = read_memory 7@ size 1 virtual_protect false  // hour
0A8D: 13@ = read_memory 8@ size 1 virtual_protect false  // minutes

  


0AD1: show_formatted_text_highpriority "cycle: %d time next: %X %X %d:%d" time 2000 4@ 7@ 8@ 12@ 13@
wait 2000 
0A8D: 7@ = read_memory 7@ size 1 virtual_protect false  // hour
0A8D: 8@ = read_memory 8@ size 1 virtual_protect false  // minutes
0AB1: call_scm_func @GetIntRemainder 2 divisor 7@ % divisor 24 store_remainder_to 7@ 
0AB1: call_scm_func @GetIntRemainder 2 divisor 8@ % divisor 60 store_remainder_to 8@

5@ *= 60
005A: 5@ += 6@  // (int)
    
7@ *= 60
005A: 7@ += 8@  // (int)

if 
001D:   5@ > 7@  // (int)
else_jump @GetTimeCycleNum_isTimeInRangeOfStartAndNext
0AB2: ret 1 cycle 4@

:GetTimeCycleNum_isTimeInRangeOfStartAndNext
if and
002D:   2@ >= 5@  // (int)   
001D:   7@ > 2@  // (int)
else_jump @GetTimeCycleNum_Increment
0AB2: ret 1 cycle 4@  

:GetTimeCycleNum_Increment
Inc(4@)
jump @GetTimeCycleNum_Loop

:GetTimeCycleNumReturn    
0AB2: ret 1 7
}

:GetCenterTimeOfCycle
{
0@ - address of _timeCycleStartHours
1@ - address of _timeCycleStartMinutes
2@ - cycle (0-7)
Example: 0AB1: call_scm_func @GetCenterTimeOfCycle 3 hoursAddress _timeCycleStartHoursAddress minutes _timeCycleStartMinutesAddress cycle 4 store_cycleNum 7@
}
0A8E: 3@ = 2@ + 1 // int
0AB1: call_scm_func @GetIntRemainder 2 divisor 3@ % divisor 8 store_remainder_to 3@     // next cycle

// next cycle
0A8E: 6@ = 0@ + 3@ // int
0A8E: 7@ = 1@ + 3@ // int
0A8D: 6@ = read_memory 6@ size 1 virtual_protect false  // hour
0A8D: 7@ = read_memory 7@ size 1 virtual_protect false  // minutes

6@ *= 60
005A: 6@ += 7@  // (int)

005A: 0@ += 2@  // (int)
005A: 1@ += 2@  // (int)
0A8D: 4@ = read_memory 0@ size 1 virtual_protect false  // hour
0A8D: 5@ = read_memory 1@ size 1 virtual_protect false  // minutes
4@ *= 60
005A: 4@ += 5@  // (int)

    if
    001D:   6@ > 4@  // (int)
    then
    005A: 4@ += 6@  // (int)   
    else
    
    4@ += 1440
    005A: 4@ += 6@  // (int)
    end
4@ /= 2

0AB1: call_scm_func @GetIntRemainder 2 divisor 4@ % divisor 1440 store_remainder_to 5@
0AB1: call_scm_func @GetIntRemainder 2 divisor 4@ % divisor 60 store_remainder_to 5@
4@ /= 60
    
0AB2: ret 2 hour 4@ minutes 5@

:GetStartTimeOfCycle
{
0@ - address of _timeCycleStartHours
1@ - address of _timeCycleStartMinutes
2@ - cycle (0-7)
}
{
005A: 0@ += 2@  // (int)   
005A: 1@ += 2@  // (int)
0A8D: 0@ = read_memory 0@ size 1 virtual_protect FALSE
0AB1: call_scm_func @GetIntRemainder 2 divisor 0@ % divisor 24 store_remainder_to 0@
0A8D: 1@ = read_memory 1@ size 1 virtual_protect FALSE
0AB1: call_scm_func @GetIntRemainder 2 divisor 1@ % divisor 60 store_remainder_to 1@
0AB2: ret 2 hour 0@ minutes 1@
}
0871: init_jump_table 2@ total_jumps 8 default_jump 0 @GetStartTimeOfCycle_unknown jumps 0 @GetStartTimeOfCycle_0 1 @GetStartTimeOfCycle_1 2 @GetStartTimeOfCycle_2 3 @GetStartTimeOfCycle_3 4 @GetStartTimeOfCycle_4 5 @GetStartTimeOfCycle_5 6 @GetStartTimeOfCycle_6
0872: jump_table_jumps 7 @GetStartTimeOfCycle_7 -1 @GetStartTimeOfCycle_unknown -1 @GetStartTimeOfCycle_unknown 10 @GetStartTimeOfCycle_unknown 11 @GetStartTimeOfCycle_unknown -1 @GetStartTimeOfCycle_unknown -1 @GetStartTimeOfCycle_unknown -1 @GetStartTimeOfCycle_unknown -1 @GetStartTimeOfCycle_unknown

:GetStartTimeOfCycle_0
0AB2: ret 2 hour 0 minutes 0

:GetStartTimeOfCycle_1
0AB2: ret 2 hour 5 minutes 0

:GetStartTimeOfCycle_2
0AB2: ret 2 hour 6 minutes 0

:GetStartTimeOfCycle_3
0AB2: ret 2 hour 7 minutes 0

:GetStartTimeOfCycle_4
0AB2: ret 2 hour 12 minutes 0

:GetStartTimeOfCycle_5
0AB2: ret 2 hour 19 minutes 0

:GetStartTimeOfCycle_6
0AB2: ret 2 hour 20 minutes 0

:GetStartTimeOfCycle_7
0AB2: ret 2 hour 22 minutes 0

:GetStartTimeOfCycle_unknown
0AB2: ret 2 hour 0 minutes 0

:GetIntNumberInRangeNotHigherThanThisValue
    if
    001D:   0@ > 1@  // (int)
    then
    0AB2: ret 1 1@
    end    
0AB2: ret 1 0@

:GetIntNumberInRangeNotLowerThanThisValue
    if
    001D:   1@ > 0@  // (int)
    then
    0AB2: ret 1 1@
    end    
0AB2: ret 1 0@

:GetIntNumberNotLowerThanZero
    if
    0@ < 0
    then
    0AB2: ret 1 0
    end
0AB2: ret 1 0@

const
WeatherNamesEntryLength = 23
end
:WeatherNames
{
Definition: char WeatherNames[23][23]
23 weathers, longest name takes 22 bytes, but it must be NULL terminated
}
hex
{00, char[13]}	"EXTRASUNNY_LA" 00000000000000000000
{01, char[8]}	"SUNNY_LA" 000000000000000000000000000000
{02, char[18]}	"EXTRASUNNY_SMOG_LA" 0000000000
{03, char[13]}	"SUNNY_SMOG_LA" 00000000000000000000
{04, char[9]}	"CLOUDY_LA" 0000000000000000000000000000
{05, char[8]}	"SUNNY_SF" 000000000000000000000000000000
{06, char[13]}	"EXTRASUNNY_SF" 00000000000000000000
{07, char[9]}	"CLOUDY_SF" 0000000000000000000000000000
{08, char[8]}	"RAINY_SF" 000000000000000000000000000000
{09, char[8]}	"FOGGY_SF" 000000000000000000000000000000
{10, char[11]}	"SUNNY_VEGAS" 000000000000000000000000
{11, char[16]}	"EXTRASUNNY_VEGAS" 00000000000000
{12, char[12]}	"CLOUDY_VEGAS" 0000000000000000000000
{13, char[22]}	"EXTRASUNNY_COUNTRYSIDE" 00
{14, char[17]}	"SUNNY_COUNTRYSIDE" 000000000000
{15, char[18]}	"CLOUDY_COUNTRYSIDE" 0000000000
{16, char[17]}	"RAINY_COUNTRYSIDE" 000000000000
{17, char[17]}	"EXTRASUNNY_DESERT" 000000000000
{18, char[12]}	"SUNNY_DESERT" 0000000000000000000000
{19, char[16]}	"SANDSTORM_DESERT" 00000000000000
{20, char[10]}	"UNDERWATER" 00000000000000000000000000
{21, char[14]}	"EXTRACOLOURS_1" 000000000000000000
{22, char[14]}	"EXTRACOLOURS_2" 000000000000000000
end

const
TimeCycleNamesEntryLength = 9
end
:TimeCycleNames
{
Definition: TimeCycleNames[8][9]
8 cycles, 8 character takes longest name
}
hex
{00, char[8]}	"Midnight" 00
{01, char[3]}	"5AM" 000000000000
{02, char[3]}	"6AM" 000000000000
{03, char[3]}	"7AM" 000000000000
{04, char[6]}	"Midday" 000000
{05, char[3]}	"7PM" 000000000000
{06, char[3]}	"8PM" 000000000000
{07, char[4]}	"10PM" 0000000000
end

:TimecycFieldDescriptions
hex
0d 0a 2f 2f 41 6d 62 09 09 09 41 6d 62 5f 4f 62 6a 09 44 69 72 09 09 09 53 6b 79 20 74 6f 70 09 09 09 53 6b 79 20 62 6f 74 09 09 53 75 6e 43 6f 72 65 09 09 53 75 6e 43 6f 72 6f 6e 61 09 53 75 6e 53 7a 09 53 70 72 53 7a 09 53 70 72 42 67 68 74 09 53 68 64 77 09 4c 69 67 68 74 53 68 64 09 50 6f 6c 65 53 68 64 09 46 61 72 43 6c 70 09 46 6f 67 53 74 09 4c 69 67 68 74 4f 6e 47 72 6f 75 6e 64 09 4c 6f 77 43 6c 6f 75 64 73 52 47 42 09 42 6f 74 74 6f 6d 43 6c 6f 75 64 52 47 42 09 57 61 74 65 72 52 47 42 41 09 09 09 41 6c 70 68 61 31 09 52 47 42 31 09 09 09 41 6c 70 68 61 32 09 52 47 42 32 09 09 43 6c 6f 75 64 41 6c 70 68 61 09 09 49 6c 6c 75 6d 69 6e 61 74 69 6f 6e 0d 0a 00
end

:TimecycDatHeader
hex
2f 2f 20 47 65 6e 65 72 61 74 65 64 20 75 73 69
6e 67 20 49 6e 2d 67 61 6d 65 20 54 69 6d 65 63
79 63 20 45 64 69 74 6f 72 20 77 72 69 74 74 65
6e 20 62 79 20 66 61 73 74 6d 61 6e 39 32 0d 0a
2f 2f 20 59 6f 75 20 63 61 6e 20 66 69 6e 64 20
74 68 69 73 20 73 63 72 69 70 74 20 6f 6e 20 67
74 61 66 6f 72 75 6d 73 2e 63 6f 6d 0d 0a 0d 0a
00
end

:TimecycDatMultipleSlashes
hex
2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 20
00
end

:TimecycDatDirectLight
hex
09 "255" 20 "255" 20 "255" 00
end

:WriteNewTimecycDat
// Example: 0AB1: call_scm_func @WriteNewTimecycDat 4 CTimecycArrayIndex 4@ script_pointer 3@ number_of_weathers 23 write_illumination? true
0A99: chdir 0
if
0A9A: 4@ = openfile "data\timecyc.dat" mode 0x6277  // IF and SET;  'wb'
else_jump @WriteNewTimecycDat_return
0A8F: 5@ = 1@ - @TimecycDatHeader // int
0AB1: call_scm_func @FileWriteStringFromMemoryAddress 2 fileHandle 4@ memoryString 5@ 

0A8F: 5@ = 1@ - @WeatherNames // int
0A8F: 10@ = 1@ - @TimecycFieldDescriptions // int   
0A8F: 15@ = 1@ - @TimecycDatMultipleSlashes // int 
0A8F: 16@ = 1@ - @TimecycDatDirectLight // int

7@ = 0 
    
    while 001D:   2@ > 7@  // (int)    
    
    0AB1: call_scm_func @FileWriteStringFromMemoryAddress 2 fileHandle 4@ memoryString 15@    
    
    0AB1: call_scm_func @FileWriteStringFromMemoryAddress 2 fileHandle 4@ memoryString 5@
    
    0AB1: call_scm_func @FileWriteStringFromMemoryAddress 2 fileHandle 4@ memoryString 10@ 
        
    0A8F: 6@ = 1@ - @TimeCycleNames // int
        for 8@ = 0 to 7     // cycle loop  
              
        gosub @WriteNewTimecyc_writeTwoSlashes
        
        0AB1: call_scm_func @FileWriteStringFromMemoryAddress 2 fileHandle 4@ memoryString 6@
        gosub @WriteNewTimecyc_writeNewLine                     
                                                           
        0A90: 9@ = 8@ * 2@ // int
        005A: 9@ += 7@  // (int)   ; now it is byte index
        
        // Amb       
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_AMBRedPool index 9@ size SIZEOF_BYTE
                    
        gosub @WriteNewTimecyc_writeSpace      
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_AMBGreenPool index 9@ size SIZEOF_BYTE
                
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_AMBBluePool index 9@ size SIZEOF_BYTE
        
        // Amb_Obj         
        gosub @WriteNewTimecyc_writeTabulator  
        
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_AMB_OBJRedPool index 9@ size SIZEOF_BYTE
                
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_AMB_OBJGreenPool index 9@ size SIZEOF_BYTE
        
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_AMB_OBJBluePool index 9@ size SIZEOF_BYTE
        
        // Dir (unused by game, but present in timecyc.dat)
        0AB1: call_scm_func @FileWriteStringFromMemoryAddress 2 fileHandle 4@ memoryString 16@
        
        // Sky top
        gosub @WriteNewTimecyc_writeTabulator
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_SkyTopRedPool index 9@ size SIZEOF_BYTE
                
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_SkyTopGreenPool index 9@ size SIZEOF_BYTE
        
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_SkyTopBluePool index 9@ size SIZEOF_BYTE
        
        // Sky bot
        gosub @WriteNewTimecyc_writeTabulator
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_SkyBotRedPool index 9@ size SIZEOF_BYTE
                
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_SkyBotGreenPool index 9@ size SIZEOF_BYTE
        
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_SkyBotBluePool index 9@ size SIZEOF_BYTE        
        
        // SunCore
        gosub @WriteNewTimecyc_writeTabulator
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_SunCoreRedPool index 9@ size SIZEOF_BYTE
                
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_SunCoreGreenPool index 9@ size SIZEOF_BYTE
        
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_SunCoreBluePool index 9@ size SIZEOF_BYTE

        // SunCorona
        gosub @WriteNewTimecyc_writeTabulator
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_SunCoronaRedPool index 9@ size SIZEOF_BYTE              
               
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_SunCoronaGreenPool index 9@ size SIZEOF_BYTE
        
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_SunCoronaBluePool index 9@ size SIZEOF_BYTE
        
        // SunSz
        gosub @WriteNewTimecyc_writeTabulator
               
        0AB1: call_scm_func @WriteNewTimecyc_handleFloatFromByteSave 3 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_SunszPool index 9@
                 
        // SprSz       
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleFloatFromByteSave 3 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_SprszPool index 9@                                                                                           

        // SprBght        
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleFloatFromByteSave 3 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_SprzbghtPool index 9@                                                                                           

        ////// SprSz
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_ShdwPool index 9@ size SIZEOF_BYTE
        
        // LightShd
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_LightShdPool index 9@ size SIZEOF_BYTE                 
  
        // PoleShd
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_PoleShdPool index 9@ size SIZEOF_BYTE
        
        // FarClp
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_FarClpPool index 9@ size SIZEOF_WORD
        
        // FogSt
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_FogStPool index 9@ size SIZEOF_WORD
        
        // LightOnGround
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleFloatFromByteSave 3 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_LightOnGroundPool index 9@
        
        ///// LowCloudsRGB
        gosub @WriteNewTimecyc_writeTabulator   
        
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_LowCloudsRedPool index 9@ size SIZEOF_BYTE
                
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_LowCloudsGreenPool index 9@ size SIZEOF_BYTE
        
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_LowCloudsBluePool index 9@ size SIZEOF_BYTE
        
        ///// BottomCloudRGB
        gosub @WriteNewTimecyc_writeTabulator   
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_BottomCloudsRedPool index 9@ size SIZEOF_BYTE
                
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_BottomCloudsGreenPool index 9@ size SIZEOF_BYTE
        
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_BottomCloudsBluePool index 9@ size SIZEOF_BYTE
        
        ///// WaterRGBA
        gosub @WriteNewTimecyc_writeTabulator     
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_WaterRedPool index 9@ size SIZEOF_BYTE
                
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_WaterGreenPool index 9@ size SIZEOF_BYTE        
        
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_WaterBluePool index 9@ size SIZEOF_BYTE
        
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_WaterAlphaPool index 9@ size SIZEOF_BYTE                                                                                            
        
        ///// ColourCorrect1
        gosub @WriteNewTimecyc_writeTabulator                                                                            
        
        0A8E: 11@ = Base0_CTimeCyc_ColourCorrect1AlphaPool + 9@ // int
        0A8D: 11@ = read_memory 11@ size SIZEOF_BYTE virtual_protect FALSE
        11@ /= 2
        0AB1: call_scm_func @convIntToStr 1 num 11@ store_to 11@ 12@
        0AB1: call_scm_func @getStringLen 2 string 11@ 12@ store_to 13@
        0A9E: writefile 4@ size 13@ from 11@
               
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_ColourCorrect1RedPool index 9@ size SIZEOF_BYTE
        
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_ColourCorrect1GreenPool index 9@ size SIZEOF_BYTE                        

        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_ColourCorrect1BluePool index 9@ size SIZEOF_BYTE                        

        ///// ColourAdd2Alpha
        gosub @WriteNewTimecyc_writeTabulator                                                                               
        
        0A8E: 11@ = Base0_CTimeCyc_ColourAdd2AlphaPool + 9@ // int
        0A8D: 11@ = read_memory 11@ size SIZEOF_BYTE virtual_protect FALSE
        11@ /= 2
        0AB1: call_scm_func @convIntToStr 1 num 11@ store_to 11@ 12@
        0AB1: call_scm_func @getStringLen 2 string 11@ 12@ store_to 13@
        0A9E: writefile 4@ size 13@ from 11@
               
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_ColourAdd2RedPool index 9@ size SIZEOF_BYTE
        
        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_ColourAdd2GreenPool index 9@ size SIZEOF_BYTE                        

        gosub @WriteNewTimecyc_writeSpace 
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_ColourAdd2BluePool index 9@ size SIZEOF_BYTE
        
        // LowCloudsAlphaPool
        gosub @WriteNewTimecyc_writeTabulator    
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_LowCloudsAlphaPool index 9@ size SIZEOF_BYTE
        
        // UpperCloudsAlphaPool
        gosub @WriteNewTimecyc_writeSpace     
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_UpperCloudsAlphaPool index 9@ size SIZEOF_BYTE
        
        // UnusedCloudsAlphaPool
        gosub @WriteNewTimecyc_writeSpace     
        0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 4@ ArrayBaseAddress Base0_CTimeCyc_UnusedCloudsAlphaPool index 9@ size SIZEOF_BYTE
                                   
        // Illumination
            IF
            3@ <> false
            then
            gosub @WriteNewTimecyc_writeSpace 
            0A8E: 11@ = Base0_CTimeCyc_IlluminationPool + 9@ // int
            0A8D: 11@ = read_memory 11@ size SIZEOF_BYTE virtual_protect FALSE
            0093: 11@ = integer 11@ to_float
            11@ /= 100.0
            0AB1: call_scm_func @ConvertFloatToStr 1 num 11@ store_to 11@ 12@ 13@ 14@
            0AB1: call_scm_func @getStringLen 4 string 11@ 12@ 13@ 14@ store_to 17@
            0A9E: writefile 4@ size 17@ from 11@
            end               
        
        :WriteNewTimecyc_goToNextIteration        
        gosub @WriteNewTimecyc_writeNewLine
        6@ += TimeCycleNamesEntryLength
        end 
    
    gosub @WriteNewTimecyc_writeTwoSlashes
    gosub @WriteNewTimecyc_writeNewLine
    5@ += WeatherNamesEntryLength
    Inc(7@)
    end
0A9B: closefile 4@
:WriteNewTimecycDat_return
0AB2: ret 0

:WriteNewTimecyc_writeNewLine
11@ = 0x0A0D   // new line
0A9E: writefile 4@ size 2 from 11@
return

:WriteNewTimecyc_writeTwoSlashes
11@ = 0x2F2F   // two slashes /
0A9E: writefile 4@ size 2 from 11@
return  

:WriteNewTimecyc_writeSpace
11@ = 0x20  // space
0A9E: writefile 4@ size 1 from 11@
return

:WriteNewTimecyc_writeTabulator
11@ = 0x09  // tab
0A9E: writefile 4@ size 1 from 11@
return

:WriteNewTimecyc_handleIntegerSave
// Example: 0AB1: call_scm_func @WriteNewTimecyc_handleIntegerSave 4 fileHandle 3@ ArrayBaseAddress 0@ index 5 size 1
006A: 2@ *= 3@  // (int)
005A: 1@ += 2@  // (int)
0A8D: 1@ = read_memory 1@ size 3@ virtual_protect false
0AB1: call_scm_func @convIntToStr 1 num 1@ store_to 1@ 2@
0AB1: call_scm_func @getStringLen 2 string 1@ 2@ store_to 3@
0A9E: writefile 0@ size 3@ from 1@
0AB2: ret 0

:WriteNewTimecyc_handleFloatFromByteSave
// Example: 0AB1: call_scm_func @WriteNewTimecyc_handleFloatFromByteSave 3 fileHandle 3@ ArrayBaseAddress 0@ index 5
005A: 1@ += 2@  // (int)
0A8D: 1@ = read_memory 1@ size SIZEOF_BYTE virtual_protect FALSE
0093: 1@ = integer 1@ to_float
1@ /= 10.0
0AB1: call_scm_func @ConvertFloatToStr 1 num 1@ store_to 1@ 2@ 3@ 4@
0AB1: call_scm_func @getStringLen 2 string 1@ 2@ store_to 3@
0A9E: writefile 0@ size 3@ from 1@
0AB2: ret 0

:TimecycWriteMemoryByteFromFloat
// Example: 0AB1: call_scm_func @TimecycWriteMemoryByteFromFloat 5 address 9@ float 13@ add 0.1 lowest_value -12.9 highest_value 12.7 store_to 13@
005B: 1@ += 2@  // (float)

    if
    2@ > 0.0
    then
        if and
        1@ >= 0.0
        1@ < 0.1 
        then
        1@ = 0.1
        else
            if
            0025:   1@ > 4@  // (float)
            then
            0087: 1@ = 4@ // (float)
            end         
        end
    else
        if and
        1@ <= 0.0
        1@ > -0.1
        then
        1@ = -0.1
        else
            if
            0025:   3@ > 1@  // (float)
            then
            0087: 1@ = 3@ // (float)
            end            
        end
    end

0087: 2@ = 1@ // (float)

1@ *= 10.0
1@ += 0.5
0092: 1@ = float 1@ to_integer
0A8C: write_memory 0@ size 1 value 1@ virtual_protect false
0AB2: ret 1 2@

:timecycStartHours
hex
00  // $0
05  // $1
06  // $2
07  // $3
12  // $4
19  // $5       
20  // $6
22  // $7
end


:timecycStartMinutes
hex
00  // $0
00  // $1
00  // $2
00  // $3
00  // $4
00  // $5       
00  // $6
00  // $7
end

:TimecycReadFloatFromMemoryByte
// Example: 0AB1: call_scm_func @ReadTimecycFloatFromMemoryByte 1 address 3@ float_to 5@
0AB1: call_scm_func @ReadMemory 4 address 0@ size 1 signed true virtual_protect false store_results_to 0@

    if
    0@ == 0
    then
    0@ = -1
    else
        if
        0@ < 0
        then
        0@ -= 1    
        end
    end        

0093: 0@ = integer 0@ to_float
0@ /= 10.0
0AB2: ret 1 0@      

:DrawFloatOnScreen
{
 Description: 
    Draws float on screen using TCFLT or TCFLTN GXT entry. 

 Parameters:
   Passed:
     0@ - number (float)
     1@ - accuracy  
     2@ - screen pos X
     3@ - screen pos Y
     
   Result:
     none
 
 Example:
  0AB1: call_scm_func @DrawFloatOnScreen 4 number 5@ accuracy 1 position 320.0 240.0
}
0AB1: call_scm_func @FloatPartsToIntegerValuesLengthSpecified 2 num 0@ after_comma_accuraccy 1 before_point_to 4@ after_point 5@
 
    if 
    0@ < 0.0
    then
    045B: draw_text_2numbers 2@ 3@ GXT 'TCFLTN' numbers 4@ 5@
    else
    045B: draw_text_2numbers 2@ 3@ GXT 'TCFLT' numbers 4@ 5@
    end
0AB2: ret 0

:SwitchTrueOrFalse
// Example: 0AB1: call_scm_func @SwitchTrueOrFalse 1 number 4@ store_to 4@
if
0@ <> false
else_jump @SwitchTrueOrFalse_returnTrue
0AB2: ret 1 0

:SwitchTrueOrFalse_returnTrue
0AB2: ret 1 1

{$INCLUDE functions/getLocalVarOffset.txt}
{$INCLUDE general/Addresses.txt}
{$INCLUDE functions/TestCheatString.txt}
{$INCLUDE functions/ArrayGetValueByIndex.txt}
{$INCLUDE functions/getAdditionalVarsLabelPointedIndex.txt}
{$INCLUDE functions/GetCurrentResolution.txt}
{$INCLUDE functions/ScreenScale.txt}
{$INCLUDE functions/getScriptContentPointer.txt}
{$INCLUDE functions/ColorRepresentations.txt} 
{$INCLUDE functions/Math.txt}
{$INCLUDE functions/fileHandling.txt}
{$INCLUDE functions/integer.txt}
{$INCLUDE functions/asm_handling.txt}
{$INCLUDE functions/ReadMemory.txt}
{$INCLUDE functions/getStringLen.txt}
{$INCLUDE functions/LowerString.txt}
{$INCLUDE functions/IsStringTrue.txt}
{$INCLUDE functions/ConvertFloatToStr.txt}

:GXTKeyPattern_WeatherName
hex
"TWTH%d" 00
end

:GXTKeyPattern_TimeCycle
hex
"TCYCLE%d" 00
end

:GXTKeyPattern_CurrentCycleIntensity
hex
"TTCL%d" 00
end

:GXTKeyPattern_NextCycleIntensity
hex
"TNCL%d" 00
end

:CClock__Update_part
hex
80 3D   // cmp      byte ptr [_IsTimeStopped], 0
end
:CClock__Update_cmp_IsTimeStoppedAddress
hex
00 00 00 00
00

0F 85   // jnz      @@setClockSeconds
end
:CClock__Update_jnz_isTimeStoppedActive_setLastClockTicktoSystemTimeAddress
hex
00 00 00 00

56      // push     esi

8B 35   // mov      esi, CClock__ms_nLastClockTick
end

:CClock__Update_mov_esi_CClock__ms_nLastClockTickAddress
hex
00 00 00 00

E9
end
:CClock__Update_jmp_backAddress
hex
00 00 00 00 
end

:CClock__Update_setLastClockTicktoSystemTime
hex
A1      // mov  eax, CGame__SystemTime ; millisecond resolution
end

:CClock__Update_mov_eax_CGame__SystemTimeAddress
hex
00 00 00 00

A3      // mov  CClock__ms_nLastClockTick, eax
end

:CClock__Update_mov_CClock__ms_nLastClockTick_eax_Address
hex
00 00 00 00

C3      // ret
end

:IsTimeStopped
hex
00 
end

:FloatZero
hex
00 00 00 00 
end

:CTimecycAddresses
hex
00 00 00 00	00 00 00 00	00 00 00 00	00 00 00 00	// Alignment
00 00 00 00		// 00@ - CTimecycAddresses [00]
00 00 00 00		// 01@ - CTimecycAddresses [01]
00 00 00 00		// 02@ - CTimecycAddresses [02]
00 00 00 00		// 03@ - CTimecycAddresses [03]
00 00 00 00		// 04@ - CTimecycAddresses [04]
00 00 00 00		// 05@ - CTimecycAddresses [05]
00 00 00 00		// 06@ - CTimecycAddresses [06]
00 00 00 00		// 07@ - CTimecycAddresses [07]
00 00 00 00		// 08@ - CTimecycAddresses [08]
00 00 00 00		// 09@ - CTimecycAddresses [09]
00 00 00 00		// 10@ - CTimecycAddresses [10]
00 00 00 00		// 11@ - CTimecycAddresses [11]
00 00 00 00		// 12@ - CTimecycAddresses [12]
00 00 00 00		// 13@ - CTimecycAddresses [13]
00 00 00 00		// 14@ - CTimecycAddresses [14]
00 00 00 00		// 15@ - CTimecycAddresses [15]
00 00 00 00		// 16@ - CTimecycAddresses [16]
00 00 00 00		// 17@ - CTimecycAddresses [17]
00 00 00 00		// 18@ - CTimecycAddresses [18]
00 00 00 00		// 19@ - CTimecycAddresses [19]
00 00 00 00		// 20@ - CTimecycAddresses [20]
00 00 00 00		// 21@ - CTimecycAddresses [21]
00 00 00 00		// 22@ - CTimecycAddresses [22]
00 00 00 00		// 23@ - CTimecycAddresses [23]
00 00 00 00		// 24@ - CTimecycAddresses [24]
00 00 00 00		// 25@ - CTimecycAddresses [25]
00 00 00 00		// 26@ - CTimecycAddresses [26]
00 00 00 00		// 27@ - CTimecycAddresses [27]
00 00 00 00		// 28@ - CTimecycAddresses [28]
00 00 00 00		// 29@ - CTimecycAddresses [29]
00 00 00 00		// 30@ - CTimecycAddresses [30]
00 00 00 00		// 31@ - CTimecycAddresses [31]
00 00 00 00		// 32@ - CTimecycAddresses [32]
00 00 00 00		// 33@ - CTimecycAddresses [33]
00 00 00 00		// 34@ - CTimecycAddresses [34]
00 00 00 00		// 35@ - CTimecycAddresses [35]
00 00 00 00		// 36@ - CTimecycAddresses [36]
00 00 00 00		// 37@ - CTimecycAddresses [37]
00 00 00 00		// 38@ - CTimecycAddresses [38]
00 00 00 00		// 39@ - CTimecycAddresses [39]
00 00 00 00		// 40@ - CTimecycAddresses [40]
00 00 00 00		// 41@ - CTimecycAddresses [41]
00 00 00 00		// 42@ - CTimecycAddresses [42]
00 00 00 00		// 43@ - CTimecycAddresses [43]
00 00 00 00		// 44@ - CTimecycAddresses [44]
00 00 00 00		// 45@ - CTimecycAddresses [45]
00 00 00 00		// 46@ - CTimecycAddresses [46]
00 00 00 00		// 47@ - CTimecycAddresses [47]
00 00 00 00		// 48@ - CTimecycAddresses [48]
00 00 00 00		// 49@ - CTimecycAddresses [49]
00 00 00 00		// 50@ - CTimecycAddresses [50]
00 00 00 00		// 51@ - CTimecycAddresses [45]
00 00 00 00		// 52@ - CTimecycAddresses [46]
00 00 00 00		// 53@ - CTimecycAddresses [47]
00 00 00 00		// 54@ - CTimecycAddresses [48]
00 00 00 00		// 55@ - CTimecycAddresses [49]
00 00 00 00		// 56@ - CTimecycAddresses [50]
00 00 00 00		// 57@ - CTimecycAddresses [45]
00 00 00 00		// 58@ - CTimecycAddresses [46]
00 00 00 00		// 59@ - CTimecycAddresses [47]
00 00 00 00		// 60@ - CTimecycAddresses [48]
00 00 00 00		// 61@ - CTimecycAddresses [49]
00 00 00 00		// 62@ - CTimecycAddresses [50]
end

:AdditionalVariables
hex
00 00 00 00	00 00 00 00	00 00 00 00	00 00 00 00	// Alignment
00 00 00 00		// 000@ - AdditionalVariables [00]
00 00 00 00		// 001@ - AdditionalVariables [01]
00 00 00 00		// 002@ - AdditionalVariables [02]
00 00 00 00		// 003@ - AdditionalVariables [03]
00 00 00 00		// 004@ - AdditionalVariables [04]
00 00 00 00		// 005@ - AdditionalVariables [05]
00 00 00 00		// 006@ - AdditionalVariables [06]
00 00 00 00		// 007@ - AdditionalVariables [07]
00 00 00 00		// 008@ - AdditionalVariables [08]
00 00 00 00		// 009@ - AdditionalVariables [09]
00 00 00 00		// 010@ - AdditionalVariables [10]
00 00 00 00		// 011@ - AdditionalVariables [11]
00 00 00 00		// 012@ - AdditionalVariables [12]
00 00 00 00		// 013@ - AdditionalVariables [13]
00 00 00 00		// 014@ - AdditionalVariables [14]
00 00 00 00		// 015@ - AdditionalVariables [15]
00 00 00 00		// 016@ - AdditionalVariables [16]
00 00 00 00		// 017@ - AdditionalVariables [17]
00 00 00 00		// 018@ - AdditionalVariables [18]
00 00 00 00		// 019@ - AdditionalVariables [19]
00 00 00 00		// 020@ - AdditionalVariables [20]
00 00 00 00		// 021@ - AdditionalVariables [21]
00 00 00 00		// 022@ - AdditionalVariables [22]
00 00 00 00		// 023@ - AdditionalVariables [23]
00 00 00 00		// 024@ - AdditionalVariables [24]
00 00 00 00		// 025@ - AdditionalVariables [25]
00 00 00 00		// 026@ - AdditionalVariables [26]
00 00 00 00		// 027@ - AdditionalVariables [27]
00 00 00 00		// 028@ - AdditionalVariables [28]
00 00 00 00		// 029@ - AdditionalVariables [29]
00 00 00 00		// 030@ - AdditionalVariables [30]
00 00 00 00		// 031@ - AdditionalVariables [31]
00 00 00 00		// 032@ - AdditionalVariables [32]
00 00 00 00		// 033@ - AdditionalVariables [33]
00 00 00 00		// 034@ - AdditionalVariables [34]
00 00 00 00		// 035@ - AdditionalVariables [35]
00 00 00 00		// 036@ - AdditionalVariables [36]
00 00 00 00		// 037@ - AdditionalVariables [37]
00 00 00 00		// 038@ - AdditionalVariables [38]
00 00 00 00		// 039@ - AdditionalVariables [39]
00 00 00 00		// 040@ - AdditionalVariables [40]
00 00 00 00		// 041@ - AdditionalVariables [41]
00 00 00 00		// 042@ - AdditionalVariables [42]
00 00 00 00		// 043@ - AdditionalVariables [43]
00 00 00 00		// 044@ - AdditionalVariables [44]
00 00 00 00		// 045@ - AdditionalVariables [45]
00 00 00 00		// 046@ - AdditionalVariables [46]
00 00 00 00		// 047@ - AdditionalVariables [47]
00 00 00 00		// 048@ - AdditionalVariables [48]
00 00 00 00		// 049@ - AdditionalVariables [49]
00 00 00 00		// 050@ - AdditionalVariables [50]
00 00 00 00		// 051@ - AdditionalVariables [51]
00 00 00 00		// 052@ - AdditionalVariables [52]
00 00 00 00		// 053@ - AdditionalVariables [53]
00 00 00 00		// 054@ - AdditionalVariables [54]
00 00 00 00		// 055@ - AdditionalVariables [55]
00 00 00 00		// 056@ - AdditionalVariables [56]
00 00 00 00		// 057@ - AdditionalVariables [57]
00 00 00 00		// 058@ - AdditionalVariables [58]
00 00 00 00		// 059@ - AdditionalVariables [59]
00 00 00 00		// 060@ - AdditionalVariables [60]
00 00 00 00		// 061@ - AdditionalVariables [61]
00 00 00 00		// 062@ - AdditionalVariables [62]
00 00 00 00		// 063@ - AdditionalVariables [63]
00 00 00 00		// 064@ - AdditionalVariables [64]
00 00 00 00		// 065@ - AdditionalVariables [65]
00 00 00 00		// 066@ - AdditionalVariables [66]
00 00 00 00		// 067@ - AdditionalVariables [67]
00 00 00 00		// 068@ - AdditionalVariables [68]
00 00 00 00		// 069@ - AdditionalVariables [69]
00 00 00 00		// 070@ - AdditionalVariables [70]
00 00 00 00		// 071@ - AdditionalVariables [71]
00 00 00 00		// 072@ - AdditionalVariables [72]
00 00 00 00		// 073@ - AdditionalVariables [73]
00 00 00 00		// 074@ - AdditionalVariables [74]
00 00 00 00		// 075@ - AdditionalVariables [75]
00 00 00 00		// 076@ - AdditionalVariables [76]
00 00 00 00		// 077@ - AdditionalVariables [77]
00 00 00 00		// 078@ - AdditionalVariables [78]
00 00 00 00		// 079@ - AdditionalVariables [79]
00 00 00 00		// 080@ - AdditionalVariables [80]
00 00 00 00		// 081@ - AdditionalVariables [81]
00 00 00 00		// 082@ - AdditionalVariables [82]
00 00 00 00		// 083@ - AdditionalVariables [83]
00 00 00 00		// 084@ - AdditionalVariables [84]
00 00 00 00		// 085@ - AdditionalVariables [85]
00 00 00 00		// 086@ - AdditionalVariables [86]
00 00 00 00		// 087@ - AdditionalVariables [87]
00 00 00 00		// 088@ - AdditionalVariables [88]
00 00 00 00		// 089@ - AdditionalVariables [89]
00 00 00 00		// 090@ - AdditionalVariables [90]
00 00 00 00		// 091@ - AdditionalVariables [91]
00 00 00 00		// 092@ - AdditionalVariables [92]
00 00 00 00		// 093@ - AdditionalVariables [93]
00 00 00 00		// 094@ - AdditionalVariables [94]
00 00 00 00		// 095@ - AdditionalVariables [95]
00 00 00 00		// 096@ - AdditionalVariables [96]
00 00 00 00		// 097@ - AdditionalVariables [97]
00 00 00 00		// 098@ - AdditionalVariables [98]
00 00 00 00		// 099@ - AdditionalVariables [99]
00 00 00 00		// 100@ - AdditionalVariables [100]
00 00 00 00		// 101@ - AdditionalVariables [101]
00 00 00 00		// 102@ - AdditionalVariables [102]
00 00 00 00		// 103@ - AdditionalVariables [103]
00 00 00 00		// 104@ - AdditionalVariables [104]
00 00 00 00		// 105@ - AdditionalVariables [105]
00 00 00 00		// 106@ - AdditionalVariables [106]
00 00 00 00		// 107@ - AdditionalVariables [107]
00 00 00 00		// 108@ - AdditionalVariables [108]
00 00 00 00		// 109@ - AdditionalVariables [109]
00 00 00 00		// 110@ - AdditionalVariables [110]
00 00 00 00		// 111@ - AdditionalVariables [111]
00 00 00 00		// 112@ - AdditionalVariables [112]
00 00 00 00		// 113@ - AdditionalVariables [113]
00 00 00 00		// 114@ - AdditionalVariables [114]
00 00 00 00		// 115@ - AdditionalVariables [115]
00 00 00 00		// 116@ - AdditionalVariables [116]
00 00 00 00		// 117@ - AdditionalVariables [117]
00 00 00 00		// 118@ - AdditionalVariables [118]
00 00 00 00		// 119@ - AdditionalVariables [119]
00 00 00 00		// 120@ - AdditionalVariables [120]
00 00 00 00		// 121@ - AdditionalVariables [121]
00 00 00 00		// 122@ - AdditionalVariables [122]
00 00 00 00		// 123@ - AdditionalVariables [123]
00 00 00 00		// 124@ - AdditionalVariables [124]
00 00 00 00		// 125@ - AdditionalVariables [125]
00 00 00 00		// 126@ - AdditionalVariables [126]
00 00 00 00		// 127@ - AdditionalVariables [127]
00 00 00 00		// 128@ - AdditionalVariables [128]
00 00 00 00		// 129@ - AdditionalVariables [129]
00 00 00 00		// 130@ - AdditionalVariables [130]
00 00 00 00		// 131@ - AdditionalVariables [131]
00 00 00 00		// 132@ - AdditionalVariables [132]
00 00 00 00		// 133@ - AdditionalVariables [133]
00 00 00 00		// 134@ - AdditionalVariables [134]
00 00 00 00		// 135@ - AdditionalVariables [135]
00 00 00 00		// 136@ - AdditionalVariables [136]
00 00 00 00		// 137@ - AdditionalVariables [137]
00 00 00 00		// 138@ - AdditionalVariables [138]
00 00 00 00		// 139@ - AdditionalVariables [139]
00 00 00 00		// 140@ - AdditionalVariables [140]
00 00 00 00		// 141@ - AdditionalVariables [141]
00 00 00 00		// 142@ - AdditionalVariables [142]
00 00 00 00		// 143@ - AdditionalVariables [143]
00 00 00 00		// 144@ - AdditionalVariables [144]
00 00 00 00		// 145@ - AdditionalVariables [145]
00 00 00 00		// 146@ - AdditionalVariables [146]
00 00 00 00		// 147@ - AdditionalVariables [147]
00 00 00 00		// 148@ - AdditionalVariables [148]
00 00 00 00		// 149@ - AdditionalVariables [149]
00 00 00 00		// 150@ - AdditionalVariables [150]
00 00 00 00		// 151@ - AdditionalVariables [151]
00 00 00 00		// 152@ - AdditionalVariables [152]
00 00 00 00		// 153@ - AdditionalVariables [153]
00 00 00 00		// 154@ - AdditionalVariables [154]
00 00 00 00		// 155@ - AdditionalVariables [155]
00 00 00 00		// 156@ - AdditionalVariables [156]
00 00 00 00		// 157@ - AdditionalVariables [157]
00 00 00 00		// 158@ - AdditionalVariables [158]
00 00 00 00		// 159@ - AdditionalVariables [159]
00 00 00 00		// 160@ - AdditionalVariables [160]
00 00 00 00		// 161@ - AdditionalVariables [161]
00 00 00 00		// 162@ - AdditionalVariables [162]
00 00 00 00		// 163@ - AdditionalVariables [163]
00 00 00 00		// 164@ - AdditionalVariables [164]
00 00 00 00		// 165@ - AdditionalVariables [165]
00 00 00 00		// 166@ - AdditionalVariables [166]
00 00 00 00		// 167@ - AdditionalVariables [167]
00 00 00 00		// 168@ - AdditionalVariables [168]
00 00 00 00		// 169@ - AdditionalVariables [169]
00 00 00 00		// 170@ - AdditionalVariables [170]
00 00 00 00		// 171@ - AdditionalVariables [171]
00 00 00 00		// 172@ - AdditionalVariables [172]
00 00 00 00		// 173@ - AdditionalVariables [173]
00 00 00 00		// 174@ - AdditionalVariables [174]
00 00 00 00		// 175@ - AdditionalVariables [175]
00 00 00 00		// 176@ - AdditionalVariables [176]
00 00 00 00		// 177@ - AdditionalVariables [177]
00 00 00 00		// 178@ - AdditionalVariables [178]
00 00 00 00		// 179@ - AdditionalVariables [179]
00 00 00 00		// 180@ - AdditionalVariables [180]
00 00 00 00		// 181@ - AdditionalVariables [181]
00 00 00 00		// 182@ - AdditionalVariables [182]
00 00 00 00		// 183@ - AdditionalVariables [183]
00 00 00 00		// 184@ - AdditionalVariables [184]
00 00 00 00		// 185@ - AdditionalVariables [185]
00 00 00 00		// 186@ - AdditionalVariables [186]
00 00 00 00		// 187@ - AdditionalVariables [187]
00 00 00 00		// 188@ - AdditionalVariables [188]
00 00 00 00		// 189@ - AdditionalVariables [189]
00 00 00 00		// 190@ - AdditionalVariables [190]
00 00 00 00		// 191@ - AdditionalVariables [191]
00 00 00 00		// 192@ - AdditionalVariables [192]
00 00 00 00		// 193@ - AdditionalVariables [193]
00 00 00 00		// 194@ - AdditionalVariables [194]
00 00 00 00		// 195@ - AdditionalVariables [195]
00 00 00 00		// 196@ - AdditionalVariables [196]
00 00 00 00		// 197@ - AdditionalVariables [197]
00 00 00 00		// 198@ - AdditionalVariables [198]
00 00 00 00		// 199@ - AdditionalVariables [199]
00 00 00 00		// 200@ - AdditionalVariables [200]
00 00 00 00		// 201@ - AdditionalVariables [201]
00 00 00 00		// 202@ - AdditionalVariables [202]
00 00 00 00		// 203@ - AdditionalVariables [203]
00 00 00 00		// 204@ - AdditionalVariables [204]
00 00 00 00		// 205@ - AdditionalVariables [205]
00 00 00 00		// 206@ - AdditionalVariables [206]
00 00 00 00		// 207@ - AdditionalVariables [207]
00 00 00 00		// 208@ - AdditionalVariables [208]
00 00 00 00		// 209@ - AdditionalVariables [209]
00 00 00 00		// 210@ - AdditionalVariables [210]
00 00 00 00		// 211@ - AdditionalVariables [211]
00 00 00 00		// 212@ - AdditionalVariables [212]
00 00 00 00		// 213@ - AdditionalVariables [213]
00 00 00 00		// 214@ - AdditionalVariables [214]
00 00 00 00		// 215@ - AdditionalVariables [215]
00 00 00 00		// 216@ - AdditionalVariables [216]
00 00 00 00		// 217@ - AdditionalVariables [217]
00 00 00 00		// 218@ - AdditionalVariables [218]
00 00 00 00		// 219@ - AdditionalVariables [219]
00 00 00 00		// 220@ - AdditionalVariables [220]
00 00 00 00		// 221@ - AdditionalVariables [221]
00 00 00 00		// 222@ - AdditionalVariables [222]
00 00 00 00		// 223@ - AdditionalVariables [223]
00 00 00 00		// 224@ - AdditionalVariables [224]
00 00 00 00		// 225@ - AdditionalVariables [225]
00 00 00 00		// 226@ - AdditionalVariables [226]
00 00 00 00		// 227@ - AdditionalVariables [227]
00 00 00 00		// 228@ - AdditionalVariables [228]
00 00 00 00		// 229@ - AdditionalVariables [229]
00 00 00 00		// 230@ - AdditionalVariables [230]
00 00 00 00		// 231@ - AdditionalVariables [231]
00 00 00 00		// 232@ - AdditionalVariables [232]
00 00 00 00		// 233@ - AdditionalVariables [233]
00 00 00 00		// 234@ - AdditionalVariables [234]
00 00 00 00		// 235@ - AdditionalVariables [235]
00 00 00 00		// 236@ - AdditionalVariables [236]
00 00 00 00		// 237@ - AdditionalVariables [237]
00 00 00 00		// 238@ - AdditionalVariables [238]
00 00 00 00		// 239@ - AdditionalVariables [239]
00 00 00 00		// 240@ - AdditionalVariables [240]
00 00 00 00		// 241@ - AdditionalVariables [241]
00 00 00 00		// 242@ - AdditionalVariables [242]
00 00 00 00		// 243@ - AdditionalVariables [243]
00 00 00 00		// 244@ - AdditionalVariables [244]
00 00 00 00		// 245@ - AdditionalVariables [245]
00 00 00 00		// 246@ - AdditionalVariables [246]
00 00 00 00		// 247@ - AdditionalVariables [247]
00 00 00 00		// 248@ - AdditionalVariables [248]
00 00 00 00		// 249@ - AdditionalVariables [249]
end